Best ACMer Solves the Hardest Problem-( 预处理 )

G. Best ACMer Solves the Hardest Problem 4 x y k,查询所有到(x,y)的欧几里得距离为k−−√的点的权重总和。今天,他注意到了一个问题,由Kevin Li发布,说:最近,我实现了一个实验,需要找到所有数据记录,它们到查询点q的欧几里得距离是相同的值r。我尝试使用k-d树来提高搜索效率。顺便说一下,两个点(x0,y0)和(x1,y1)之间的欧几里得距离等于(x0−x1)2+(y0−y1)2−−−−−−−−−−−−−−−−−−√。以下每个n行都包含三个整数x、y和w,满足1≤x,y,w≤6000,描述了初始时位于(x,y)处的权重为w的点。 阅读详情
题目链接:点击进入
题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意

n 个初始点,m 次操作,每个点有权值
1 操作,插入点( x ,y )权值 w
2 操作,删除点( x ,y )
3 操作,将每个与点( x , y )距离为 √ k 的点的权值都增加 w
4 操作,查询与点( x ,y )距离为 √ k 的点的权值和
操作时输入的点的坐标不是实际点的坐标
实际点的坐标 =( 输入点坐标 + 最近一次查询的答案 )% 6000 + 1

思路

预处理 k ,将其拆成 i * i + j * j 的模式,记录 i , j
3、4 操作的时候,直接将 k 变成对应的 i , j
直接查询距离 √ k 的点是否存在
( i ! = j 时,8 个方向;i == j 时,4 个方向 ;i , j 都为零时,原点;部分为零时,四个方向。)

代码
#include<bits/stdc++.h>
#define pii pair<int,int> 
#define int long long
using namespace std;
typedef long long ll;
const int maxn=1e7+10;
const int inf=0x3f3f3f3f;
const int d[4][2]={1,1,-1,-1,1,-1,-1,1};
int t,n,m,k,x,y,l,w,op,tot;
map<int,int>mp;
vector<pii>v[maxn];
void init()
{
	for(int i=0;i<=6000;i++)
	{
		for(int j=i;j<=6000;j++)
		{
			int tmp=i*i+j*j;
			if(tmp>1e7) break;
			v[i*i+j*j].push_back({i,j});
		}
	}
}
signed main()
{
	init();
	scanf("%lld",&t);
	while(t--)
	{
		mp.clear();l=0;
		scanf("%lld%lld",&n,&m);
		for(int i=1;i<=n;i++)
		{
			scanf("%lld%lld%lld",&x,&y,&w);
			mp[x*10000+y]=w;
		}
		printf("Case #%lld:\n",++tot);	
		while(m--)
		{
			scanf("%lld%lld%lld",&op,&x,&y);
			x=(x+l)%6000+1;
			y=(y+l)%6000+1;
			if(op==1)
			{
				scanf("%lld",&w);
				mp[x*10000+y]=w;
			}
			else if(op==2)
				mp.erase(x*10000+y);
			else if(op==3)
			{
				scanf("%lld%lld",&k,&w);
				for(int i=0;i<v[k].size();i++)
				{
					if(v[k][i].first==0&&v[k][i].second==0)
					{
						if(mp.count(x*10000+y))
							mp[x*10000+y]+=w;
						continue;
					}
					for(int j=0;j<4;j++)
					{
						if(v[k][i].first==0&&d[j][0]==1)
							continue;
						if(v[k][i].second==0&&d[j][1]==1)
							continue;
						int xx=x+v[k][i].first*d[j][0];
						int yy=y+v[k][i].second*d[j][1];
						if(mp.count(xx*10000+yy))
							mp[xx*10000+yy]+=w;
					}
					if(v[k][i].first!=v[k][i].second) 
					{
						for(int j=0;j<4;j++)
						{
							if(v[k][i].first==0&&d[j][1]==1)
								continue;
							if(v[k][i].second==0&&d[j][0]==1)
								continue;
							int xx=x+v[k][i].second*d[j][0];
							int yy=y+v[k][i].first*d[j][1];
							if(mp.count(xx*10000+yy))
								mp[xx*10000+yy]+=w;
						}
					}
				}
			}
			else if(op==4)
			{
				int sum=0;
				scanf("%lld",&k);
				for(int i=0;i<v[k].size();i++)
				{
					if(v[k][i].first==0&&v[k][i].second==0)
					{
						if(mp.count(x*10000+y))
							sum+=mp[x*10000+y];
						continue;
					}
					for(int j=0;j<4;j++)
					{
						if(v[k][i].first==0&&d[j][0]==1)
							continue;
						if(v[k][i].second==0&&d[j][1]==1)
							continue;
						int xx=x+v[k][i].first*d[j][0];
						int yy=y+v[k][i].second*d[j][1];
						if(mp.count(xx*10000+yy))
							sum+=mp[xx*10000+yy];
					}
					if(v[k][i].first!=v[k][i].second) 
					{
						for(int j=0;j<4;j++)
						{
							if(v[k][i].first==0&&d[j][1]==1)
								continue;
							if(v[k][i].second==0&&d[j][0]==1)
								continue;
							int xx=x+v[k][i].second*d[j][0];
							int yy=y+v[k][i].first*d[j][1];
							if(mp.count(xx*10000+yy))
								sum+=mp[xx*10000+yy];
						}
					}
				}
				printf("%lld\n",sum);	
				l=sum;
			}
		}
	}
    return 0;
}
从零构建智能监控系统:ZLMediaKit与SpringBoot的RTSP流处理实战 本文详细介绍了如何从零构建智能监控系统,结合ZLMediaKit与SpringBoot实现RTSP流处理。通过多协议支持、高性能架构设计及工业级部署优化,解决传统监控方案的兼容性差、延迟高等问题,适用于物联网和智能安防领域。 阅读详情

相关推荐

深入解析MOSFET结电容与分布参数:Cgd、Cgs、Cds与Ciss、Crss、Coss的关系与应用

本文深入解析了MOSFET结电容Cgd、Cgs、Cds及其等效参数Ciss、Crss、Coss对开关性能的影响。文章详细阐述了米勒电容Cgd如何导致开关损耗与振荡,并提供了基于电容参数的高频电路选型、驱动设计及PCB布局优化等实战指南,帮助工程师解决开关电源与电机驱动中的常见问题。

weixin_29240711的博客 1278

2018icpc沈阳站G题

传送门:Best ACMer Solves the Hardest Problem Best ACMer Solves the Hardest Problem Time limit12000 ms Memory limit1048576 kB One day an excellent ACMer will leave the field to face new challenges, ju...

Waiting For You 640

HFSS 3D Layout一键导入PCB,高效搞定微带线损耗仿真

在高速PCB设计中,信号完整性与电磁仿真是确保链路质量的关键环节。传统的HFSS手动建模流程繁琐且极易出错,尤其面对微带线、带状线等高频结构时,叠层参数、铜箔粗糙度等细节难以精准还原,导致仿真结果与实测偏差较大。HFSS 3D Layout模块提供了从EDA工具直接导入PCB文件的能力,完整保留走线、过孔、叠层及材料属性,结合精确的介质损耗模型与端口设置,大幅缩短建模时间并提升仿真精度。该技术广泛应用于DDR、SerDes等高速数字链路的设计验证,以及SI/PI工程师对PCB损耗性能的快速评估。本文从导入操

weixin_29191081的博客 254

2018 ACM-ICPC, Asia Shenyang Regional G. Best ACMer Solves the Hardest Problem

传送门 G. Best ACMer Solves the Hardest Problem 题意 给出二维平面上的nnn个点, 每个点都有权值www。然后给出mmm次操作,一共有四种操作:加入一个权值为www的新点、删除一个点、将到(x,y)(x,y)(x,y)点距离为k\sqrt{k}k​的点权值加www、求到(x,y)(x,y)(x,y)点距离为k\sqrt{k}k​的点的权值和,记录为lastanslastanslastans并且输出它。以后每次输入的x,yx,yx,y都要对lastanslastans

Tryna 202

从AMBA到USB:手把手教你评估和选择Synopsys DesignWare里的免费商用IP

本文详细介绍了如何评估和选择Synopsys DesignWare中的免费商用IP,从AMBA到USB等关键模块。通过技术参数核对、验证环境评估和集成注意事项,帮助工程师高效利用这些经过硅验证的商业级IP,提升SoC设计效率。文章还探讨了免费IP与付费IP的边界策略,避免常见陷阱。

weixin_42683394的博客 296

4.7W防削顶单声道D类音频功率放大器HT6872介绍

HT6872是一款低EMI,防削顶失真,单声道免滤波D类音频功率放大器。在6.5V电源,10%THD+N,4Ω负载条件下,输出4.71W功率,在各类音频终端应用中维持高效率并提供AB类放大器的性能。

weichen_78的博客 4698

G. Best ACMer Solves the Hardest Problem(暴力)

原题: http://codeforces.com/gym/249353/problem/G 题意: 在一个二维空间内,开始给出n个点,和每个点的w值,接下来有m个操作,一共有四种操作,增删改查。然后让输出给次查询结果。查询的时候会给出一个k值和(x,y),如果有点跟他的欧几里得距离等于sqrt(k),那么就加上其w值,最后输出和。对于每次操作有个lastans,真正的坐标是(((x+lastan...

QAQ 4110

Charles 抓包工具下载安装及基础使用

本篇内容主讲关于Charles抓包工具,从下载安装以及配置信息,证书的下载安装以及PC端设置代理配置和移动端设备配置代理,阐述关于Charles抓包工具面板的基础使用以及如何进行抓包和设置断点,对于软件测试以及对抓包感兴趣的读者可以翻阅!感谢大家的支持!!!

灵魂学者的博客 2957

Gym 101955G Best ACMer Solves the Hardest Problem(2018沈阳区域赛G)【思维】

传送门:http://codeforces.com/gym/101955/problem/G 思路:打出1e7里每个数字可以有哪些(x,y),x平方+y平方等于这个数,然后每个点找距离根号k的点的时候,就四个方向找一下,用set存来去重(某个点某维坐标变成0的时候,会有重复的) 代码:(写的不仔细,wa了十发,生无可恋.jpg) #include&lt;cstdio&gt; #includ...

智熄 1434

C#上位机开发入门:从基础到进阶的全方位指南

C#作为一门现代化编程语言,具备强大的功能和广泛的生态支持,适合用于开发各种类型的上位机应用。通过学习并掌握UI开发、通信协议、多线程编程、数据库操作等技能,你可以打造出稳定、易用、性能优异的上位机软件。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 8311

RT-DETR改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度

本文记录的是利用改进检测精度,详细说明了优化原因,注意事项等。原论文在红外小目标检测任务中,小目标在多次下采样操作中容易丢失关键信息。通过替代编码器和解码器基本组件中的传统卷积操作,更好地保留小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch si

Limiiiing的博客 1646

预处理技巧Best ACMer Solves the Hardest Problem(暴力 + 预处理)

我们在二维平面坐标下要求到(x, y)距离为 sqrt(k) 的点, 我们可以预处理设这个点 为(x1, y1)那么(x−x1)2+(y−y1)2==k(x - x1)^2 + (y - y1)^2 == k(x−x1)2+(y−y1)2==k 令dx=x−x1,dy=y−y1dx = x - x1, dy = y - y1dx=x−x1,dy=y−y1 我们只需预处理出所有的dx2+dy2==kdx^2 + dy^2 == kdx2+dy2==k 的dx 和 dy 和 k 的组合 在查询时就可以按照k的

qq_45778406的博客 256

国产化操作系统shell常用脚本

国产操作系统常用脚本:统信、麒麟。

Reyn_观极 594

2018 ICPC 沈阳 G.Best ACMer Solves the Hardest Problem(预处理 思维)

题目链接:https://nanti.jisuanke.com/t/A2168 分析 这题关键在怎么将 k 拆分成两个可以开方的数,可以先预处理出可能的对数,然后直接调用,同时一定要注意越界的问题。 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 6000; int n,m,t; map<pair<int,int>,int> mp; ll ans;

Sankkl1的博客 262

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Best ACMer Solves the Hardest Problem 【Gym - 101955G】【暴力枚举】

题目链接 题目大意 有一个的矩阵,n个点,每个点有一个权值,m次操作,有四种类型 1.增加一个点在x,y,权值为w 2.删除在x,y的点 3.在(x,y)距离为k的点都增加w的权值 4(x,y)距离k的点的权值和 解题思路 因为k只有1e7所以暴力枚举出来所有的可能的组合,然后暴力 memset会超时,所以把点存一下,最后清零 #include<stdio.h> #include&lt...

qq_41925919的博客 617

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

2018 ICPC 沈阳 Best ACMer Solves the Hardest Problem(暴力)

传送门 题目大意 在二维平面给出nnn个点,每个点都有一个权值,且横纵坐标是正整数且范围均是[1,6000][1,6000][1,6000],现在有四种操作: 插入一个不存在的点 删除一个已经存在的点 输入一个点和长度kkk,权值www,距离该点欧几里得距离为k\sqrt{k}k​的所有点的权值都增加kkk 输入一个点和长度kkk,求出距离该点欧几里得距离为k\sqrt{k}k​的所有点的权值和 解题思路 不难发现,该题的坐标范围很小,时间给了12s12s12s而且内存给的很大1024M1024M10

Happig的博客 280

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[2018ICPC沈阳] G Best ACMer Solves the Hardest Problem map+set

给出一个6000∗60006000*60006000∗6000大小的平面,平面上初始的时候有若干个点,点上有权值。然后支持四种操作:1.插入权值为www的点。2.删除某个位置的点。3.给距离某个位置为k\sqrt kk​距离的点都加上www的权值。4.对距离某个位置k\sqrt kk​距离的点权求和。 点的范围不大。可以预处理出来所有距离为k\sqrt kk​在两个方向上可以分解为哪些长度。插入和...

qq_40859782的博客 271

2018 ICPC 沈阳G - Best ACMer Solves the Hardest Problem(细节+思维)

题目链接 题解思路:首先最最重要的就是要注意到1e7这个数很暧昧,它非常小,因此两个整数的平方和 <= 1e7 的情况是十分有限的,我们可以先预处理1——1e7 = 另外两个数平方和 的情况,之后在m次询问中枚举这些情况即可。经过程序计算,1——>1e7内可以由另外两个数的平方和构成的最多的是“5928325”,而组成它的对数仅有48个。 #include<bits/stdc++...

Mmasker的博客 416

G - Best ACMer Solves the Hardest Problem Gym - 101955G

G - Best ACMer Solves the Hardest Problem Gym - 101955G 题意: 我们需要建立一个数据库以支持实时查询和修改。这个数据库中的记录是点坐标 (x,y) 和其权值 w。查询与修改操作可以表示为 1 x y w,在 (x,y) 处插入一个新的点,我们保证在插入之前该位置没有点。 2 x y,删除 (x,y) 处的点,我们保证在删除之前该位置存在一点。 3 x y k w,对于每一个到 (x,y) 的欧几里得距离为 sqrt(k) 的点,给它的权值增加 w。 4

qq_35975367的博客 443

ACM-ICPC Shenyang Oniste 2018 Best ACMer Solves the Hardest Problem

ACM-ICPC Shenyang Oniste 2018 Best ACMer Solves the Hardest Problem 思路: 用map或者二维数组存点,然后先预处理出每个点的属于哪个k值,存在vector pair中,最后根据操作直接找就行了。如果是用二维数组存点的话,还要用vector把存进去的点记录下来,然后清空,不然直接memset会超时。 #include<bits/stdc++.h> using namespace std; typedef long long

weixin_45434743的博客 185

Gym 101955G Best ACMer Solves the Hardest Problem

http://codeforces.com/gym/101955/problem/G 这题的关键在于k<=1e7 于是只需要枚举所有x^2+y^2<=1e7,然后k=x^2+y^2这里地方就多一种方案 最后发现所有数字中最多的拆分方案只有24种 那么直接m*kk[k].size()暴力做就行了。 用tim[x][y]作时间戳,记录这个位置保存的值是否是当前第cas组数据中的值...

binarycopycode 584

2018年第43届ACM/ICPC亚洲区域赛沈阳站现场赛

2018年第43届ACM/ICPC亚洲区域赛沈阳站现场赛   这次比赛赛前,有消息称这次比赛的难度是div1,比赛前心里没底。因为自己的学校实力不强,所以这次现场赛资格也来之不易,这是我第一次也是我最后一次打ICPC,所以我不想留下遗憾。   拿到题目的时候也有点畏惧,因为这次比赛的题目普遍性的都很长,而且是全英文的。为了防止漫无目的的读题而影响做题时间,我们决定跟榜。很快有大佬队过了J题,J题题...

博学 笃志 切问 近思 4691

HDU 1048 The Hardest Problem Ever

Problem Description Julius Caesar lived in a time of danger and intrigue. The hardest situation Caesar ever faced was keeping himself ali

可可 の 猫 894

2018 ICPC-ACM shenyang G - Best ACMer Solves the Hardest Problem

Gym - 101955G #pragma warning (disable:4996) #include <iostream> #include <algorithm> #include <iomanip> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <vector> #include <

xukeke12138的博客 259

The hardest problem

Description In the final exam, you are given n problems to solve, each one of which has an integer value indicating its difficulty, the larger, the harder. You need to find out which problem is the h

sysu_strange的博客 639

2018-2019 ICPC, NEERC, Northern Eurasia Finals F - Fractions 【拓展欧几里得】

传送门:http://codeforces.com/contest/1089/problem/F 思路:发现两个数字就可以凑出一个合数,变成ax+by=n-1求解,妙啊(后来发现不用欧几里得,暴力也可以……??) 代码: #include&lt;bits/stdc++.h&gt; using namespace std; using ll=long long ; const ll maxn...

智熄 412
上一篇: UVALive - 8521-LOL - ( 排列组合 )
下一篇: Eating Plan - ( 思维 + 暴力 )
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值