题目链接:http://codeforces.com/contest/445
解题报告:
俄国人今天不知道为什么九点钟就比赛了。仅仅过了两道题,第三题全然没思路,有时间单独去刷第三题吧,看起来非常难
太水了。
。
。
直接W、B错开填,顺便先抹上“ - ” 就完了
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char grid[120][120],ans[120][120]; int main() { int n,m,i,j; cin>>n>>m; for(i=0;i<n;i++) { scanf("%s",grid[i]); } for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(grid[i][j] == '-') {ans[i][j] = '-'; continue;} if(i%2 == 0) { if(j%2 ==0) ans[i][j] = 'W'; else ans[i][j] = 'B'; } else { if(j%2 ==0) ans[i][j] = 'B'; else ans[i][j] = 'W'; } } } for(i=0;i<n;i++) printf("%s\n",ans[i]); return 0; }
并查集直接搞,答案是 2 的 (n - m)次幂。
n 是药品种类数,m 是并查集并出来的集合的个数。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; typedef unsigned long long ll; int arr[55]; int find(int x) { return arr[x]==x?x:find(arr[x]); } void mer(int a,int b) { int fa,fb; fa=find(a); fb=find(b); if(fa!= fb) arr[fa]=fb; } ll p(int x,int y) { ll ans = 1; for(int i=1;i<=y;i++) ans *= x; return ans; } int main() { int i,j,n,m,from,to; cin>>n>>m; for(i=1;i<=n;i++) arr[i] = i; while(m--) { scanf("%d%d",&from,&to); mer(from,to); } //for(i=1;i<=n;i++) cout<<arr[i]<<" "; cout<<endl; int t=0; for(i=1;i<=n;i++) { if(arr[i]==i) t++; } ll ans = p(2,n-t); cout<<ans<<endl; return 0; }
去看这道题的AC代码了。,,我擦,,,不该放弃这题的。。。
哈哈哈。。
捶地笑,。。事实上就是。
仅仅剩两个点了。!!
!
。!!
。!!
!。!!
!。!
!!
不信你拿这个代码去试第三组数据,发现没有!
int main() { freopen("input.txt","r",stdin); int n,m,c,from,to,i; cin>>n>>m; for(i=1;i<=n;i++) cin>>val[i]; while(m--) { cin>>from>>to>>c; cout<<(val[from]+val[to])/c<<endl; } return 0; }
完整的AC代码例如以下:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; double val[550]; int main() { //freopen("input.txt","r",stdin); int n,m,c,from,to,i; cin>>n>>m; for(i=1;i<=n;i++) cin>>val[i]; double ans = 0; while(m--) { cin>>from>>to>>c; ans = max(ans,(val[from]+val[to])/c); } printf("%.12f\n",ans); return 0; }