2018-icpc沈阳-G-思维
http://codeforces.com/gym/101955/problem/G
给出一个6000*6000的坐标系,有四种操作,一是加入放置一个点到某个空格子上,二是从某个有点的格子移走一个点,三是将距离(x,y)距离为根号k的点权值加上w,四是询问距离(x,y)距离为根号k的点权值总和。
由于k都是整数,而在圆上的整数点很少,所以想到,A^2+B^2=K^2,处理出所有(A,B)对于每个A^2+B^2。1,2操作就很简单了,3,4操作的话直接暴力从K对应的(A,B)暴力查找合法的点。
各种TLE,WA,这个C数组大小6000*6000,每次都memset的话就会T,只能用一个vector记录下本次涉及到的点最后清零。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<map>
- #include<set>
- #include<stack>
- #include<deque>
- #include<bitset>
- #include<unordered_map>
- #include<unordered_set>
- #include<queue>
- #include<cstdlib>
- #include<ctype.h>
- #include<ctime>
- #include<functional>
- #include<algorithm>
- #include<bits/stdc++.h>
- using namespace std;
- #define LL long long
- #define pii pair<int,int>
- #define mp make_pair
- #define pb push_back
- #define fi first
- #define se second
- #define inf 0x3f3f3f3f
- #define debug puts("debug")
- #define mid ((L+R)>>1)
- #define lc (id<<1)
- #define rc (id<<1|1)
- const int maxn=;
- const int maxm=;
- const double PI=acos(-1.0);
- const double eps=1e-;
- const LL mod=1e9+;
- LL gcd(LL a,LL b){return b==?a:gcd(b,a%b);}
- LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
- LL qpow(LL a,LL b,LL c){LL r=; for(;b;b>>=,a=a*a%c)if(b&)r=r*a%c;return r;}
- struct Edge{int v,w,next;};
- template<class T>
- ostream & operator<<(ostream &out,vector<T>&v){
- for(auto x:v)cout<<x<<' ';
- return out;
- }
- void read(LL &n){
- n=; char c=getchar();
- while(c<''||c>'')c=getchar();
- while(c>=''&&c<='') n=(n<<)+(n<<)+(c-''),c=getchar();
- }
- LL C[][];
- LL dir[][]={,,,-,-,,-,-};
- bool ojbk(LL x,LL y){
- if(x<||x>||y<||y>||C[x][y]==)return ;
- return ;
- }
- #define pll pair<LL,LL>
- const LL MAX=+;
- vector<pll> cl,a[MAX];
- void AC(){
- LL T,n,m,cas=;
- scanf("%lld",&T);
- while(T--){
- scanf("%lld%lld",&n,&m);
- LL last=;
- LL x,y,w,k,op;
- for(int i=;i<=n;++i){
- scanf("%lld%lld%lld",&x,&y,&w);
- cl.pb(mp(x,y));
- C[x][y]+=w;
- }
- printf("Case #%lld:\n",++cas);
- while(m--){
- scanf("%lld%lld%lld",&op,&x,&y);
- x=(x+last)%+;
- y=(y+last)%+;cl.pb(mp(x,y));
- if(op==){
- scanf("%lld",&w);
- C[x][y]=w;
- }
- else if(op==){
- C[x][y]=;
- }
- else if(op==){
- scanf("%lld%lld",&k,&w);
- set<pll>S;
- for(auto v:a[k]){
- for(int i=;i<;++i){
- LL sx=x+v.fi*dir[i][],sy=y+v.se*dir[i][];
- if(ojbk(sx,sy))S.insert(mp(sx,sy));
- }
- }for(auto o:S){
- C[o.fi][o.se]+=w;
- }
- }
- else{
- scanf("%lld",&k);
- LL ans=;
- set<pll>S;
- for(auto v:a[k]){
- for(int i=;i<;++i){
- LL sx=x+v.fi*dir[i][],sy=y+v.se*dir[i][];
- if(ojbk(sx,sy))S.insert(mp(sx,sy));
- }
- }for(auto o:S){
- ans+=C[o.fi][o.se];
- }
- printf("%lld\n",ans);
- last=ans;
- }
- }
- for(auto v:cl)C[v.fi][v.se]=;
- cl.clear();
- }
- }
- int main(){
- for(LL i=;i<=;++i){
- for(LL j=;j<=;++j){
- if(i*i+j*j>MAX-)break;
- a[i*i+j*j].pb(mp(i,j));
- }
- }
- AC();
- return ;
- }
- /*
- 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
- */
2018-icpc沈阳-G-思维的更多相关文章
- 2018 ICPC 沈阳网络赛
2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...
- 2018 ICPC 沈阳网络预赛 Fantastic Graph (优先队列)
[传送门]https://nanti.jisuanke.com/t/31447 [题目大意]:有一个二分图,问能不能找到它的一个子图,使得这个子图中所有点的度数在区间[L,R]之内. [题解]首先我们 ...
- 2018 icpc 沈阳
https://codeforces.com/gym/101955 J 签到 #include<iostream> #include<cstring> #include< ...
- 2017 icpc 沈阳 G - Infinite Fraction Path
题目大意:有n个点, 每个点有一个数字0 - 9, 第 i 个点只能到 第(i * i + 1)个点,问你在哪个点出发走n次构成的数字串最大. 思路:利用求后缀数组的倍增比较思想, 许多细节需要注意. ...
- 2018 ICPC 沈阳网络赛预赛 Supreme Number(找规律)
[传送门]https://nanti.jisuanke.com/t/31452 [题目大意]:给定一个数字(最大可达10100),现在要求不超过它的最大超级质数.超级质数定义:对于一个数,把它看成数字 ...
- 2017 ACM/ICPC 沈阳 G题 Infinite Fraction Path
The ant Welly now dedicates himself to urban infrastructure. He came to the kingdom of numbers and s ...
- 2018 ICPC 徐州网络赛
2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...
- [HDU6304][数学] Chiaki Sequence Revisited-杭电多校2018第一场G
[HDU6304][数学] Chiaki Sequence Revisited -杭电多校2018第一场G 题目描述 现在抛给你一个数列\(A\) \[ a_n=\begin{cases}1 & ...
- 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)
题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...
- 2018 ICPC Pacific Northwest Regional Contest I-Inversions 题解
题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0 ...
随机推荐
- Bootstrap modal模态框关闭时,combobox input下拉框仍然保留在页面上
问题描述: 当点击模态框的关闭按钮时,下拉框中的内容没有消失,而是移动到了页面左上角 分析:这个问题的定位在于是用的哪种模态框,bootstrap和easyui都可以实现模态框,但是两个方法实现的模态 ...
- Django组件——分页器和中间件
分页器 Django内置分页器(paginator) 分页器函数为paginator,里面有几个重要的参数需要我们了解 paginator = Paginator(book_list, 10) #第二 ...
- python基础(16)-进程&线程&协程
进程之multiprocessing模块 Process(进程) Process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建. 介绍 初始化参数 Process([group [, t ...
- ubuntu常用软件命令
解压zip软件 unzip xxx.zip -d解压到指定目录 清理磁盘空间 sudo apt-get autoremove sudo apt-get clean sudo dpkg --list ...
- cocos creator怎么隐藏组件(setVisible)
以 label 为例: this.label.node.active = fasle 隐藏节点this.label.ndoe.active = true显示节点
- codeforces 982A Row
题意: 一个01串是否合法满足以下两个要求: 1.没有两个相邻的1: 2.在满足第一个条件的情况下,不能再放下更多的1. 判断一个给定的串是否合法. 思路: 最近cf的A怎么都这么坑啊... 首先是判 ...
- 创建多线程的第一种方式——创建Thread子类和重写run方法
创建多线程的第一种方式——创建Thread子类和重写run方法: 第二种方式——实现Runnable接口,实现类传参给父类Thread类构造方法创建线程: 第一种方式创建Thread子类和重写run方 ...
- java.lang.RuntimeException: wrong class format Caused by: org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException: null
Spring Boot 启动的时候报的错 使用Drools 5.6版本,Spring Boot1.5.8版本,JAVA8版本,Eclipse4.4.2版本. Google后在Stack上发现一个,中文 ...
- P2472 [SCOI2007]蜥蜴(网络流)
P2472 [SCOI2007]蜥蜴 把每个点拆成2个点,两点之间连边的边权为石柱高度 新建虚拟源点$S$和汇点$T$ $S$向所有有蜥蜴的点连边,边权1 其他边都连$inf$ 剩下就是裸的$dini ...
- Html from 标签
Html from 标签 <html> <body> <!-- form 提交表单设置 --> <form> <input type=" ...