题目链接: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;
}