500pt:
链接:http://codeforces.com/contest/378/problem/A
分析:太水了。。。
代码:
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <string.h> using namespace std; int a,b; int main() { while(cin>>a>>b) { int r1 = 0; int r2 = 0; int r3 = 0; for(int i=1;i<=6;i++) { if(abs(i-a)<abs(i-b)) r1++; else if(abs(i-a)==abs(i-b)) r2++; else r3++; } cout<<r1<<" "<<r2<<" "<<r3<<endl; } return 0; }
1000pt:
链接:http://codeforces.com/contest/378/problem/B
分析:其实不用枚举k的值,只要k=0或者n/2两者就行,分别代表了2种极端情况,覆盖了所有可能的取值
代码:
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <string.h> using namespace std; const int N=100010; int arra[N]; int arrb[N]; bool proa[N]; bool prob[N]; int n; int main() { while(cin>>n) { for(int i=0;i<n;i++) { cin>>arra[i]>>arrb[i]; } memset(proa,0,sizeof(proa)); memset(prob,0,sizeof(prob)); int k = n/2; vector<int > v; v.push_back(0); v.push_back(k); for(int i=0;i<v.size();i++) { for(int j=0;j<v[i];j++) { proa[j]=true; prob[j]=true; } int aStart = i; int bStart = i; int temp = n-2*v[i]; while(temp--) { if(arra[aStart]<=arrb[bStart]) { proa[aStart]=true; aStart++; } else { prob[bStart]=true; bStart++; } } } for(int i=0;i<n;i++) { cout<<(proa[i]==true)?"1":"0"; } cout<<endl; for(int i=0;i<n;i++) { cout<<(prob[i]==true)?"1":"0"; } cout<<endl; } return 0; }
1500pt:
链接:http://codeforces.com/contest/378/problem/C
分析:其实很简单,dfs或者bfs找到连通的对应个数 ‘.' 就行
代码:
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <string.h> using namespace std; const int N=550; char maps[N][N]; bool changed[N][N]; bool visited[N][N]; int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; int n,m,k; struct node { node(int _x,int _y){x=_x;y=_y;} int x; int y; }; int main() { while(cin>>n>>m>>k) { memset(changed,0,sizeof(changed)); memset(visited,0,sizeof(visited)); int curx= 0; int cury = 0; int cnt = 0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>maps[i][j]; if(maps[i][j]=='.') { curx = i; cury=j; cnt++; } } } int target = cnt-k; queue<node> q; q.push(node(curx,cury)); while(target>0) { node d = q.front(); q.pop(); changed[d.x][d.y]=true; visited[d.x][d.y]=true; target--; if(target<=0) break; for(int i=0;i<4;i++) { int nextx = d.x+dir[i][0]; int nexty = d.y+dir[i][1]; if(nextx>=0&&nextx<n&&nexty>=0&&nexty<m&&!visited[nextx][nexty]&&maps[nextx][nexty]=='.') { q.push(node(nextx,nexty)); visited[nextx][nexty]=true; } } } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(maps[i][j]!='.') cout<<maps[i][j]; else if(changed[i][j]==false) cout<<'X'; else cout<<maps[i][j]; } cout<<endl; } } return 0; }
然后就12:30了。。。。果断睡觉。。。