#include<iostream>#include<bits/stdc++.h>#include<unordered_map>//#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =300+7;int n,m,k,t =1,cas =1;int a[N],c[N];double res[2][N];signedmain(){int n,m,l,r;while(scanf("%d%d%d%d",&n,&m,&l,&r)&& n){int now =0;for(int i =0; i < n ; i ++){
res[now][i]=0;}
res[now][0]=1;for(int q =0;q < m ; q ++){int x;scanf("%d",&x);for(int i =0; i < n ; i ++){
res[now^1][i]=0;}for(int i =0; i < n ; i ++){if(res[now][i]>0.0){
res[now^1][(i-x+n)%n]+= res[now][i]*0.5;
res[now^1][(i+x+n)%n]+= res[now][i]*0.5;}}
now ^=1;}double sum =0;for(int i = l-1; i < r ; i ++){
sum += res[now][i];}printf("%.4f\n",sum);}return0;}
I. Building bridges
题意:找一对(H,C)距离最小。
思路:水题。暴力枚举。
AC代码:
#include<iostream>#include<bits/stdc++.h>#include<unordered_map>//#define int long long#define mk make_pair#define gcd __gcdusingnamespace std;constdouble eps =1e-10;constint mod =1e9+7;constint N =1e6+7;int n,m,k,t =1,cas =1;//int a[N],c[N];int res[N];char s[50][50];struct node{int x,y;}a[N],b[N];signedmain(){int n,m;while(scanf("%d%d",&n,&m)&& n+m){for(int i =0; i < n ; i ++){scanf("%s",s[i]);}int minn =1e9+7;int resx1,resx2,resy1,resy2;for(int i =0; i < n ; i ++){for(int j =0; j < m ; j ++){for(int k =0; k < n ; k ++){for(int l =0; l < m ; l ++){if(s[k][l]=='C'&& s[i][j]=='H'){int dis =abs(i-k)+abs(j-l);if(dis < minn){
minn = dis;
resx1 = i;
resy1 = j;
resx2 = k;
resy2 = l;}}if(s[k][l]=='H'&& s[i][j]=='C'){int dis =abs(i-k)+abs(j-l);if(dis < minn){
minn = dis;
resx1 = k;
resy1 = l;
resx2 = i;
resy2 = j;}}}}}}
cout<<resx1<<" "<<resy1<<" "<<resx2<<" "<<resy2<<endl;}return0;}