UVa11607 Cutting Cakes

UVa11607 Cutting Cakes

  • 题目链接
  • 题意
  • 分析
  • AC 代码

题目链接

  UVa11607 Cutting Cakes

题意

  平面上有n(n≤1 500)个点,其中没有3 点共线。另外有m(m≤700 000)条直线,你的任务是对于每条直线,输出3 个数p, q, r,其中p 和q 为该直线两侧的点数(p≤q),r 是直线穿过的点数。

分析

  本题限时6s,还是比较宽松的,直接用分块法能通过,比如把 n 个点集分成 8×88\times 88×8 块。
  其次,可以构建四叉树求解。先取 mid=n/2mid = n /2mid=n/2 处的点 p,根据其坐标得到划分轴,再遍历所有点 t 进行划分,t 在坐标轴上则存到当前结点数据中,不在坐标轴上则按照其所在象限存入四棵子树的数据中并递归构建子树。此后只需要从根结点递归查询:先求根结点数据的首个点与直线两端点形成的三角形有向面积 s(s>0s > 0s>0 则 ++p;s=0s = 0s=0 则 ++r;s<0s < 0s<0 则 ++q),其它数据点也都求有向面积后进行 p、q、r 进行统计。然后可以利用首个点的有向面积 s 分类讨论四个子结点的计数:s = 0 时,左上象限子结点内的数据全部统计给 p,右下象限子结点内的数据全部统计给 q,然后左下、右上两个象限的子结点进行递归查询;s > 0 时,左上象限子结点内的数据全部统计给 p,然后左下、右下、右上三个象限的子结点进行递归查询;s < 0 时右下象限子结点内的数据全部统计给 q,然后左下、左上、右上三个象限的子结点进行递归查询。

AC 代码

#include <iostream>
#include <algorithm>
using namespace std;#define M 10000
#define N 1510
#define B 8
int x[N], y[N], u[N], v[N], x1, y1, x2, y2, dx1, dy1, dx2, dy2, vx, vy, a, b, m, n, p, r, kase = 0;int cross(int x1, int y1, int x2, int y2) {return x1*y2 - x2*y1;
}struct {int b[N], bx1, by1, bx2, by2, by4, c;void add(int i) {b[c++] = i;if (c == 1) bx1 = bx2 =x[i], by1 = by2 = y[i];else bx1 = min(bx1, x[i]), bx2 = max(bx2, x[i]), by1 = min(by1, y[i]), by2 = max(by2, y[i]);}void query() {int cc = cross(vx, vy, bx1 - x1, by1 - y1); bool e = cc < 0, f = cc == 0, g = cc > 0;cc = cross(vx, vy, bx2 - x1, by1 - y1); e = e || cc < 0; f = f || cc == 0; g = g || cc > 0;cc = cross(vx, vy, bx1 - x1, by2 - y1); e = e || cc < 0; f = f || cc == 0; g = g || cc > 0;cc = cross(vx, vy, bx2 - x1, by2 - y1); e = e || cc < 0; f = f || cc == 0; g = g || cc > 0;if (f || (e && g)) {for (int i=0; i<c; ++i) {cc = cross(vx, vy, x[b[i]]-x1, y[b[i]]-y1);if (cc > 0) ++p;else if (cc == 0) ++r;}} else if (g) p += c;}
} s[B][B];void query() {x1 = (x1 + dx1) % M; y1 = (y1 + dy1) % M; x2 = (x2 + dx2) % M; y2 = (y2 + dy2) % M;if (x1 == x2 && y1 == y2) y2 = (y1 + 1) % M;p = 0; r = 0; vx = x2 - x1; vy = y2 - y1;for (int i=0; i<B; ++i) for (int j=0; j<B; ++j) s[i][j].query();cout << min(p, n-r-p) << ' ' << max(p, n-r-p) << ' ' << r << endl;
}void solve() {cin >> n;for (int i=0; i<n; ++i) cin >> x[i] >> y[i], u[i] = x[i], v[i] = x[i];sort(u, u+n); sort(v, v+n); a = unique(u, u+n) - u; b = unique(v, v+n) - v;for (int i=0; i<B; ++i) for (int j=0; j<B; ++j) s[i][j].c = 0;for (int i=0, j=(a+B-1)/B, k=(b+B-1)/B; i<n; ++i)s[(lower_bound(u, u+a, x[i]) - u) / j][(lower_bound(v, v+b, y[i]) - v) / k].add(i);cout << "Case #" << ++kase << ':' << endl;cin >> m >> x1 >> y1 >> x2 >> y2 >> dx1 >> dy1 >> dx2 >> dy2;while (m--) query();
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t; cin >> t;while (t--) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97026.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[e3nn] 等变神经网络 | 线性层o3.Linear | 非线性nn.Gate

第4章&#xff1a;等变神经网络模块 欢迎回来&#xff5e; 在我们探索e3nn的旅程中&#xff0c;我们已经揭示了一些基本概念&#xff1a; 在第1章&#xff1a;不可约表示&#xff08;Irreps&#xff09;中&#xff0c;我们学习了Irreps作为等变数据的标签&#xff0c;告诉我们数…

共享云服务器替代传统电脑做三维设计会卡顿吗

与传统本地工作站相比&#xff0c;云服务器在硬件配置、协作效率和成本控制方面具有明显优势&#xff0c;但设计师们比较关心的主要问题始终是&#xff1a;使用共享云服务器进行三维设计会出现卡顿吗&#xff1f;这取决于硬件配置、网络环境、软件优化及使用场景等多方面因素。…

Autosar之CRC模块概述

简介 CRCL模块提供如下的算法&#xff0c;用于对输入数据进行循环冗余校验&#xff0c;用于核对数据传输过程中是否被更改或者传输错误&#xff1a; CRC8: SAEJ1850 CRC8H2F: CRC8 0x2F polynomial CRC16: CCITT-FALSE CRC32: 0xF4ACFB13 CRC32P4: CRC32 0x1F4ACFB13 polynomia…

隐私计算框架PrivacyMagic(密算魔方)

隐私计算框架PrivacyMagic&#xff08;密算魔方&#xff09; 动机&#xff1a;写论文时为了实现方案需要调用各种密码学库&#xff0c;写起来有些混乱&#xff0c;失去了代码结构的美感。最可气的是现有的密码学方案基本上是个写个的&#xff0c;接口、类型并不通用&#xff0…

Linux--->网络编程(TCP并发服务器构建:[ 多进程、多线程、select ])

TCP并发服务器构建一、服务器单循环服务器&#xff1a;服务端同一时刻只能处理一个客户端的任务&#xff08;TCP&#xff09;并发服务器&#xff1a;服务端同一时刻可以处理多个客户端的任务&#xff08;UDP&#xff09;二、TCP服务端并发模型1、多进程进程资源开销大&#xff…

深入解析达梦数据库:模式分类、状态管理与实操指南

达梦数据库&#xff08;DM Database&#xff09;作为国产数据库的核心代表&#xff0c;其模式与状态机制是保障数据高可用、实现主备同步的关键基础。无论是日常运维中的数据库配置&#xff0c;还是故障场景下的主备切换&#xff0c;都需要深入理解模式与状态的特性及交互逻辑。…

如何选择适合自己的PHP微服务框架?

在开始选择之前&#xff0c;我们首先要明白&#xff1a;为什么需要微服务框架&#xff1f;传统的单体应用&#xff08;Monolithic Application&#xff09;虽然开发简单&#xff0c;但随着业务复杂度的增加&#xff0c;会变得臃肿且难以维护。而微服务架构通过将应用拆分为一组…

ESP32使用场景及大规模物联网IoT

最近用ESP32搭建了一个网络,想知道搭建的网络拓扑对不对。一、物联网无线通信v.s通讯网络无线通信我第一个好奇的问题就是&#xff0c;物联网用ESP32的话&#xff0c;路由器用什么&#xff1f;物联网也可以组WLAN&#xff0c;通讯网也可以组WLAN。把自己的Tenda AC1200路由器拆…

NSSCTF 4th WP

第一次打比赛AK了&#xff0c;虽然题比较简单没啥好说的&#xff0c;但还是想记录一下 WEB ez_signin 源码&#xff1a; from flask import Flask, request, render_template, jsonify from pymongo import MongoClient import reapp Flask(__name__)client MongoClient…

Paimon——官网阅读:主键表

主键表(Table with PK)PK 是 Primary Key&#xff08;主键&#xff09;的缩写。在数据库中&#xff0c;主键是一个或多个列的组合&#xff0c;其值在表中是唯一的&#xff0c;并且不能为 NULL。主键的作用是确保每一行记录的唯一性&#xff0c;便于数据的查找、管理和维护&…

【配置 PyCharm 连接远程服务器进行开发和调试的完整流程】

前提条件&#xff1a; 1.PyCharm Professional&#xff08;社区版不支持远程解释器&#xff09; 2.代码在本地目录里面&#xff0c;可以同步上传远程服务器 3.宿主机上安装了conda 环境 操作方法&#xff1a; 1、在本地使用PyCharm打开工程代码&#xff1b; 2、然后Add New_in…

在压力测试中如何确定合适的并发用户数?

确定压力测试中的合适并发用户数 在进行压力测试时&#xff0c;确定合适的并发用户数是评估系统性能的关键步骤。并发用户数是指同时向系统发送请求的用户数量&#xff0c;它直接影响系统的负载水平和性能表现。以下是几种常用的方法和考虑因素&#xff0c;用于确定合适的并发…

微算法科技(NASDAQ:MLGO)突破性FPGA仿真算法技术助力Grover搜索,显著提升量子计算仿真效率

在量子计算迅猛发展的今天&#xff0c;量子算法尤其是在搜索和加密领域的应用&#xff0c;正逐步揭开了其颠覆性潜力。然而&#xff0c;量子计算机的实际实现仍是一项复杂且充满挑战的任务&#xff0c;因此&#xff0c;如何在经典计算平台上高效建模和仿真量子算法成为了当前的…

TencentOS Server 4.4 下创建mysql容器无法正常运行的问题

环境 腾讯的 TencentOS Server 4.4 服务器系统 Linux app 6.6.92-34.1.tl4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 25 14:33:47 CST 2025 x86_64 x86_64 x86_64 GNU/Linux docker使用的是yum安装的版本 [rootapp ~]# docker version Client:Version: 28.0.1-202…

稀土:从“稀有”到“命脉”的科技核心

稀土&#xff0c;这个听起来有些陌生的词汇&#xff0c;其实早已悄然渗透进我们生活的方方面面。它并非真的“稀有”&#xff0c;而是指17种金属元素的统称&#xff0c;包括镧、铈、钕、铕等。这些元素在地壳中并不稀少&#xff0c;但因其独特的物理和化学性质&#xff0c;使其…

开发手札:UnrealEngine编辑器开发

以前在unity框架中开发了非常多实用且高频使用的编辑器工具&#xff0c;现在准备把目前用得上工具移植到ue4中。下面说明一下ue4开发编辑器工具的流程。1.创建编辑器工具控件2.在控件中创建一个Button和一个EditableText&#xff0c;用于测试3.新建一个继承UEditorUtilityWidge…

EXCEL开发之路(一)公式解析—仙盟创梦IDE

Excel 数据校验&#xff1a;基于自定义格式的深度解析与开发实现引言在数据处理和管理领域&#xff0c;Excel 是一款广泛应用的工具。确保 Excel 中数据的准确性和完整性至关重要&#xff0c;而数据校验是达成这一目标的关键手段。本文将借助特定的代码示例&#xff0c;深入探讨…

Day14——JavaScript 核心知识全解析:变量、类型与操作符深度探秘

接续上文&#xff1a;《前端小白进阶 Day13&#xff1a;JavaScript 基础语法 交互技巧 知识图谱&#xff0c;零基础也能懂》-CSDN博客 点关注不迷路哟。你的点赞、收藏&#xff0c;一键三连&#xff0c;是我持续更新的动力哟&#xff01;&#xff01;&#xff01; 主页:一位…

anaconda本身有一个python环境(base),想用别的环境就是用anaconda命令行往anaconda里创建虚拟环境

差不多是这个意思&#xff0c;但需要稍微澄清一下&#xff1a;Anaconda 可以管理任意版本的 Python你安装了 Anaconda 后&#xff0c;默认有一个 base 环境自带的 Python。如果你想用其他版本&#xff0c;比如 Python 3.9、3.10&#xff0c;可以用 conda create -n py39 python…

毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)

文章目录 项目介绍大全&#xff08;可点击查看&#xff0c;不定时更新中&#xff09;概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式…