既然开通了这个博客就先随便写点好了。
本人第二次刷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继续刷!