洛谷T8115 毁灭
2017-08-02 19:15
134 查看
题目描述
YJC决定对入侵C国的W国军队发动毁灭性打击。将C国看成一个平面直角坐标系,W国一共有n^2个人进入了C国境内,在每一个(x,y)(1≤x,y≤n)上都有恰好一个W国人。YJC决定使用m颗核导弹,每一颗核导弹将杀死某个圆内所有的W国人,恰好在圆上也会被杀死。现在YJC想知道,在这一轮核打击之后,还有多少个W国人在C国境内。
输入输出格式
输入格式:
第一行包含两个整数n和m,意思如题所示。
接下来m行每行三个整数x,y和r,表示以(x,y)为圆心,r为半径的圆圆内和圆上的W国人被全部杀死。
输出格式:
一行,包含一个整数,表示幸存的W国人个数。
输入输出样例
输入样例#1:3 2 2 2 1 1 1 2输出样例#1:
1
说明
第一枚导弹杀死了(1,2)、(2,1)、(2,2)、(2,3)、(3,2)上的W国人,第二枚导弹杀死了(1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(3,1)上的W国人,只剩下(3,3)上的W国人没有被杀死。
对于50%的数据,满足n,m≤50。
对于100%的数据,满足1≤x,y≤n≤5000,0≤r≤n,1≤m≤5000。
还是码力问题 以后不确定还是要写暴力啊QAQ不能太自信没对拍就交啊
——————————————————————————————————
这道题很容易想到的一个暴力就是枚举每一个核弹和每一个点(这样的复杂度是o(nnm))
很明显只能拿五十分
那么我们可以想着降一维 考虑每一行和每一个核弹的关系 利用差分就很容易实现辣
我的方法呢是 每读入一个核弹就枚举所有他能覆盖到的行数 枚举的方向大概是这样
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f; } int n,m,ans; int sum[5007][5007]; int main() { n=read(); m=read(); for(int k=1;k<=m;k++){ int x=read(),y=read(),r=read(); for(int i=0,j=r;i<=r;i++){ int mx=r*r-i*i; while(j*j>mx) j--; int L=y-j,R=y+j; if(L<1) L=1; if(R>n) R=n; if(x-i>=1) sum[x-i][L]++,sum[x-i][R+1]--; if(x+i<=n) sum[x+i][L]++,sum[x+i][R+1]--; } } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ans+=bool(sum[i][j]+=sum[i][j-1]); printf("%d\n",n*n-ans); return 0; }View Code
相关文章推荐
- 反清华博士王垠(未来人类科学家在中国的毁灭)
- (转)通往(革命性的、不做恶的、疯狂赚钱的、自我毁灭的)Google核心之路
- 偷菜游戏,悄悄开启毁灭中国的魔盒
- 毁灭你的“三观”:南方系是体制内的,ACFUN受到表扬,韩寒这只鸡已经到了被宰的时候了
- [Mugeda HTML5技术教程之1] HTML5: 生存还是毁灭
- 犹太教中极端保守的教派正在毁灭以色列
- 足以一分钟毁灭公司的30个细节
- Spring-SpringMVC-Shiro 入门到毁灭(第一步) [最基本框架搭建]
- 凡不能毁灭我的,必将使我强大
- 四大漏洞将毁灭博客
- To be, or not to be; that is the question! 生存还是毁灭,这是个值得思考的问题。
- 谁是毁灭智能手机的掘墓者
- [笨木头“创业”路]No.7 接近毁灭的状态
- 毁灭感情的不是距离,而是怀疑
- 【姿势】Android 和 Mac 爆毁灭级安全漏洞
- 从英雄到独夫:蒋介石的自我毁灭(比较深刻:共产主义产生的土壤并不在战场,而在于 国民政府自身的行政崩溃和经济灾难)
- 2017广东工业大学程序设计竞赛决赛-只有通过毁灭才能揭示真理
- 都是套路!要毁灭人类、喷马斯克、还获得公民身份的机器人Sophia,真相确是...
- 哦,所谓成功,原来就是成就于人,而毁灭自己