G. Best ACMer Solves the Hardest Problem

2023-09-20 16:39:38

Problem - G - Codeforces

有一天,一位优秀的ACMer将离开这个领域,面对新的挑战,就像前辈们所做的一样。他们中的一些人接管了家族企业,一些人在失业的边缘挣扎。一些人有勇气展示自己,成为专业的Ingress玩家,一些人仍在不断挑战自己的极限,尝试解决Project Euler中的所有问题。

但是,对于前国王Benecol de Cecco来说,所有这些目的都太肤浅了。他现在所做的就是成为StackOverflow上最好的回答者。StackOverflow是最大、最值得信赖的在线社区,供开发人员学习、分享他们的编程知识和建立他们的职业生涯。

今天,他注意到了一个问题,由Kevin Li发布,说:最近,我实现了一个实验,需要找到所有数据记录,它们到查询点q的欧几里得距离是相同的值r。我尝试使用k-d树来提高搜索效率。然而,我发现k-d树需要遍历所有叶节点才能返回结果,也就是说,它仍然需要比较所有数据集才能获得结果。

这个问题可以形式化地建立一个具有实时查询和修改的数据库。首先,假设我们在平面上有n个不同的点。第i个点位于(xi,yi)处,具有权重wi。然后,我们考虑动态给出的几个查询和修改:

1 x y w,插入一个权重为w的新点(x,y),在操作之前我们保证没有点位于那个位置; 2 x y,删除位于(x,y)处的点,在操作之前我们保证该点存在; 3 x y k w,对于每个到(x,y)的欧几里得距离为k−−√的点,将其权重增加w; 4 x y k,查询所有到(x,y)的欧几里得距离为k−−√的点的权重总和。

Benecol de Cecco说这个问题很容易,他让我与大家分享这个问题。顺便说一下,两个点(x0,y0)和(x1,y1)之间的欧几里得距离等于(x0−x1)2+(y0−y1)2−−−−−−−−−−−−−−−−−−√。

输入 输入包含多个测试用例,第一行包含一个正整数T,表示测试用例的数量,最多为1000。

对于每个测试用例,第一行包含两个整数n和m,表示平面上的初始点数和操作数,其中1≤n,m≤105。

以下每个n行都包含三个整数x、y和w,满足1≤x,y,w≤6000,描述了初始时位于(x,y)处的权重为w的点。

以下每个m行都包含一个查询或修改操作。这些操作采用上述形式给出。为使所有操作中的x和y动态化,我们使用lastans表示最近查询的答案,其初始值为零。对于输入中具有值x和y的每个操作,它们的实际值应为(((x+lastans)mod6000)+1)和(((y+lastans)mod6000)+1)。操作中的所有系数都是整数,满足0≤k≤107和1≤x,y,w≤6000。

我们保证所有测试用例中n和m的总和分别不超过106。

输出 对于每个测试用例,首先输出一行包含“Case #x:”(不带引号),其中x是从1开始的测试用例编号。

然后对于每个查询,在一行中输出一个整数表示答案。

Example

Input

Copy

1
3 6
2999 3000 1
3001 3000 1
3000 2999 1
1 2999 3000 1
4 2999 2999 1
2 2995 2996
3 2995 2995 1 1
4 2995 2995 1
4 3000 3000 1

Output

Copy

Case #1:
4
6
0

Note

In the sample case, if we ignore the special input format for dynamic x

and y

in operations, here we can show these modifications and queries directly in an offline format as follows:

  • 1 3000 3001 1;
  • 4 3000 3000 1;
  • 2 3000 3001;
  • 3 3000 3000 1 1;
  • 4 3000 3000 1;
  • 4 3007 3007 1.

题解:
假设点tx,ty与此时的点x,y的距离为根号k

(tx - x)^2 + (ty - y)^2 = k

设dx = tx - x

dy = ty - y

由于k的大小只有1e7,x,y的大小最多6000

我们可以枚举出来,所有满足k的dx和dy

那么符合条件的

tx = x - dx

ty = y - dy

又因为我们求的dx,dy都是正的,但是他们可能是负的,所以有四种情况

具体细节见代码,

比赛中由re导致的错误情况有很多,大小超int也可能导致

#include<bits/stdc++.h>
using namespace std;
//#define int long long
const int N=1e7 + 10;
typedef pair<int,int> PII;
vector<PII> p[N];
bool vis[7010][7010];
int res[7010][7010];
int dx[4] = {1,1,-1,-1};
int dy[4] = {1,-1,1,-1};
int idx;
void solve()
{
	long long last = 0;
	int n,q;
	cin >> n >> q;
	vector<PII> t; 
	for(int i = 1;i <= n;i++)
	{
		int x,y,w;
		cin >> x >> y >> w;
		t.push_back({x,y});
		vis[x][y] = 1;
		res[x][y] = w;
	}
	cout <<"Case #"<<++idx<<":\n";
	while(q--)
	{
		int op,x,y,k,w;
		cin >> op >> x >> y;
		x = (x + last)%6000 + 1;
		y = (y + last)%6000 + 1;
		t.push_back({x,y});
		
		
		if(op == 1)
		{
			cin >> w;
			vis[x][y] = 1;
			res[x][y] = w;
		}
		else if(op == 2)
		{
			vis[x][y] = 0;
			res[x][y] = 0;
		}
		else if(op == 3)
		{
			cin >> k >> w;
			if(!p[k].size())
			continue;
			set<PII> s;
			for(auto [nx,ny]:p[k])
			{
				for(int j = 0;j < 4;j++)
				{
					int tx = x + dx[j]*nx;
					int ty = y + dy[j]*ny;
					if(tx <= 0||tx > 6000||ty <= 0||ty > 6000)
					continue;
					s.insert({tx,ty});
				}
			}	
			
			
			for(auto[tx,ty]:s)
			{
				if(vis[tx][ty])
				res[tx][ty] += w;
			}
			
			
		}
		else
		{
			cin >> k;
			last = 0;
			if(!p[k].size())
			{
				cout <<last <<"\n";
				continue;
			}
			set<PII> s;
			for(auto [nx,ny]:p[k])
			{
				for(int j = 0;j < 4;j++)
				{
					int tx = x + dx[j]*nx;
					int ty = y + dy[j]*ny;
					if(tx <= 0||tx > 6000||ty <= 0||ty > 6000)
					continue;
					s.insert({tx,ty});
				}
			}			
			
			for(auto[tx,ty]:s)
			{
				if(vis[tx][ty])
				last += res[tx][ty];
			}
			cout << last <<"\n";
		}
	}
	
	for(auto tt:t)
	{
		vis[tt.first][tt.second] = 0;
		res[tt.first][tt.second] = 0;
	}
	t.clear();
}
int main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);
//	cout.tie(0);
	for(int i = 0;i <= 6000;i++)
	{
		for(int j = 0;j <= 6000;j++)
		{
			if(i*i + j*j > 1e7)
			{
				break;
			}
			p[i*i + j*j].push_back({i,j});
		}
	}
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve();
	}
}

更多推荐

Fiddler实现android手机抓包

目录一、fiddler的简介二、安装fiddler三、fiddler设置1.设置HTTPS2.设置允许远程连接3.重启fillder,使得配置生效4.查看端口监听四、android端设置1、首先查看电脑的IP地址,确保手机和电脑在同一个局域网内2、设置代理五、抓包测试原文链接一、fiddler的简介fiddler是位于

✔ ★算法基础笔记(Acwing)(二)—— 数据结构(17道题)【java版本】

数据结构1.单链表模板1.单链表(7分钟)2.双链表模板1.双链表3.模拟栈1.模拟栈(一个数组即可)2.表达式求值(20分钟)4.队列tt=-1,hh=0;1.模拟队列5.单调栈1.单调栈(4分钟)3.146.单调队列1.滑动窗口例题(10分钟)7.KMP1.KMP字符串(10分钟)二刷体会★三刷体会ne表示算上第一

网络协议 — LLDP 数据链路发现协议

目录文章目录目录LLDPLLDPDUEthernetIILLDPDUSNAPLLDPDULLDPDUTLVs基本TLV802.1定义的TLV802.3定义的TLV802.3定义的LLDP-MEDTLVLLDP消息流程LLDP协议栈LLDPLLDP(LinkLayerDiscoveryProtocol,链路层发现协议)是

Mysql存储-变量、函数、游标、判断、循环

存储过程(procedure)1、介绍:存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用2、特点封装、复用可以接收参数,也可以返回数据减少网络交互,效率

TCP粘包拆包的原因及解决办法

TCP粘包拆包的原因及解决办法文章目录TCP粘包拆包的原因及解决办法TCP粘包拆包的原因如何解决如果你曾经亲自动手在实际项目中编写过TCP服务器或客户端,特别是涉及到高性能服务器的开发,那么你一定会对TCP的粘包和拆包问题有深刻的理解。这个问题在网络编程中是无法避免的,它源于TCP协议本身的特性和网络环境的复杂性。处理

【MySQL集群一】CentOS 7上搭建MySQL集群:一主一从、多主多从

CentOS7上搭建MySQL集群介绍一主一从步骤1:准备工作步骤2:安装MySQL步骤3:配置主服务器步骤4:创建复制用户步骤5:备份主服务器数据,如果没有数据则省略这一步步骤6:配置从服务器步骤7:配置主从复制步骤8:测试主从复制处理宕机情况处理Slave宕机处理Master宕机一主多从多主多从介绍MySQL集群允

【新版】系统架构设计师 - 案例分析 - 系统维护与设计模式

个人总结,仅供参考,欢迎加好友一起讨论文章目录架构-案例分析-系统维护与设计模式典型例题1典型例题2架构-案例分析-系统维护与设计模式典型例题1某企业两年前自主研发的消防集中控制软件系统在市场上取得了较好的业绩,目前已成功应用到国内外众多企业用户的消防管理控制系统中。该软件系统通过不同型号消防控制器连接各种消防器件,实

GPT学术优化 (GPT Academic):支持一键润色、一键中英互译、一键代码解释、chat分析报告生成、PDF论文全文翻译功能、互联网信息聚合+GPT等等

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用CSDN平台,自主完成项目设计升级,提升自身的硬实力。专栏订阅:项目大全提升自身的硬实力[专栏详细介绍:项目设计

绘图(二)五子棋小游戏

AWT编程·语雀仓库:Java图形化界面:Java图形化界面学习demo与资料(gitee.com)处理位图如果仅仅绘制一些简单的几何图形,程序的图形效果依然比较单调。AWT也允许在组件上绘制位图,Graphics提供了drawlmage()方法用于绘制位图,该方法需要一个Image参数一一代表位图,通过该方法就可以绘

Android NDK 中有导出 sp智能指针吗?如果没有,可以用什么方法代替 android::sp 智能指针

AndroidNDK中有导出sp智能指针吗?如果没有,可以用什么方法代替android::sp智能指针Author:LycanNote:以下问题解答通过大模型生成,主要用于个人学习和备忘,仅供参考,若有错误或者侵权,请联系我修正,谢谢。问题AndroidNDK中有导出sp智能指针吗?如果没有,可以用什么方法代替andr

深入理解WebSocket,让你入门音视频

😄作者简介:小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊座右铭:不想当开发的测试,不是一个好测试✌️。如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍原文在这里https://testerhome.com/t

热文推荐