TopCoder SRM578 Div.2
来源:互联网 发布:淘宝保证金在哪里 编辑:程序博客网 时间:2024/04/29 20:14
既然开通了这个博客就先随便写点好了。
本人第二次刷TC。上次很不爽的只做出第一题。第二题来不及了。/_\。结果还升到Div.1了。肯定被虐。所以我用这个号再从零开始。
9点10分题目出现了。打开第一题。
250p:
题意:N个什么动物来着。每个动物有两个梯子(为什么是梯子?)。有的动物丢了一些。两个煞笔捡起了K个梯子。问最少和最多有多少个动物没掉梯子。
明显最少的话,K个梯子属于K个动物,答案是max(0,N-K)
最多的话就是所有掉梯子的都是掉两个,答案是(N*2-K)/2
然后匆忙test一下样例就交了。得了240p。我第二个交的。前面那个稍微比我快一点。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<set>#include<queue>#include<deque>#include<cstdlib>#include<string>using namespace std;class DeerInZooDivTwo{ public: vector<int> getminmax(int N,int K){ vector<int>ans; ans.clear(); if(K>N)ans.push_back(0); else ans.push_back(N-K); ans.push_back((N*2-K)>>1); return ans; }};
然后我就点开了第二题。
500p:
题意:点阵上有一堆动物,有的是鸭子有的是鹅。至少有一只鹅。所有和鹅的曼哈顿距离小于d的动物一定是鹅。问有多少种鹅的分布情况。
我真是弱逼纠结了好久。后来发现可以dfs。找出所有鹅的连通块。计算连通块个数cnt。答案自然是2^cnt-1。
然后就不停地码代码。然后最大的test没过。纠结了一会儿发现没开long long。/_\然后改了一下就过了。交上去的时候只剩260p了。。/_\那个人还是比我早交一点。可能交晚了,500p只剩下260p了。。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<set>#include<queue>#include<deque>#include<cstdlib>#include<string>using namespace std;int vis[60][60],block[60][60];class GooseInZooDivTwo{ public: int n,m,bc; long long qp(long long b,long long p,long long k){ long long ans=1; while(p){ if(p&1)ans=ans*b%k; p>>=1; b=b*b%k; } return ans; } void floodfill(int x,int y,int bc,int d){ vis[x][y]=1; block[x][y]=bc; for(int i=0;i<=d && x-i>=0;i++){ for(int j=0;i+j<=d && j+y<m;j++) if(vis[x-i][y+j]==0) floodfill(x-i,y+j,bc,d); for(int j=0;i+j<=d && y-j>=0;j++) if(vis[x-i][y-j]==0) floodfill(x-i,y-j,bc,d); } for(int i=0;i<=d && x+i<n;i++){ for(int j=0;i+j<=d && j+y<m;j++) if(vis[x+i][y+j]==0) floodfill(x+i,y+j,bc,d); for(int j=0;i+j<=d && y-j>=0;j++) if(vis[x+i][y-j]==0) floodfill(x+i,y-j,bc,d); } } int count(vector <string> field, int dist){ n=field.size(); m=field[0].size(); memset(vis,0xff,sizeof(vis)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(field[i][j]=='v'){ vis[i][j]=0; } int blockcnt=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(vis[i][j]==0){ blockcnt++; floodfill(i,j,blockcnt,dist); } int ans=int((qp(2LL,1LL*blockcnt,1000000007LL)-1+1000000007LL)%1000000007LL); return ans; }};
1000p:
不太会/_\看似dp。也来不及了,就没去写了。。
快结束的时候有人交了第三题。分数飙升。我一下就被挤到第三了。额。。
然后是激情的cha时间:
做题的时候我发现两个容易错的地方:
1.第一题那个除2分上取整和下取整,可以坑掉人。
2.第二题如果不开long long说不定会挂。(我自己就被坑了好久还好我发现了)
然后我先去看大家的第一题。看到一个感觉会挂的。我就迫不及待的cha了。结果没成功。。掉了25分。。T.T
然后看到那个交第三题的人的第三题瞬间被cha了。。
然后我去看他们的第二题。果然有没开long long的。而且连mod都没有!欣喜若狂1分钟之后开cpp制造大数据。然后他就被我cha掉了。第一次成功cha。~
留下证据纪念:然后我的分数又涨上去了,到了第二。比一开始还多了二十多分。哈哈。
比赛就结束了。结果是房间第二,所有Div2的第36名。呵呵还行吧。Rating涨到了1486,一下就蓝名了,再多14分就黄名了~唉。。可惜。。要是第一次cha错的那次看仔细就好了。
图片纪念:
下次应该要去Div.1了。加油吧!
明天CF继续刷!
- TopCoder SRM578 Div.2
- [Topcoder] SRM585 Div 2
- Topcoder SRM 462 DIV 2
- topcoder srm 518 div 2
- TopCoder SRM 561 Div 2
- Topcoder SRM 565 Div.2
- Topcoder SRM 628 DIV 2
- TopCoder SRM 144 DIV 2
- TopCoder——SRM 516 DIV 2
- TopCoder——SRM 518 DIV 2
- TopCoder——SRM 519 DIV 2
- Topcoder SRM 505 Div 2 hard
- TopCoder——SRM 520 DIV 2
- TopCoder——SRM 521 DIV 2
- topcoder srm530 div.2 1000pt
- topcoder SRM div 2 level 1
- TopCoder SRM558 backup 1 DIV 2
- TopCoder SRM 634 Div.2[ABC]
- sqlite3的数据操作
- 在对象之间搬移特性之一 :Move Method(搬移函数)
- IT人“升级”四大选择
- Java如何实现多态性,基于itable, vtable源码分析
- 利用WM_GETTEXT消息获取谷歌浏览器地址栏内容。
- TopCoder SRM578 Div.2
- 修改JAVA_HOME无效,java版本保持不变的问题解决
- Perl实现后台守护进程
- Linux 内存管理 -- 线性空间与物理内存
- 在对象之间搬移特性之二 :Move Field(搬移值域)
- 编程之美
- Oracle系统管理员基础:Oracle数据字典
- hdu 1027(数学)
- 重装window后恢复Ubuntu 的 grub启动项。