NOIp2014Day1T1生活大爆炸版石头剪子布
题目分析:
设f[i][j]∈{0,1}代表当A出第i种手势,B出第j种手势时A的得分情况。
随后循环枚举A和B的出招(设为a,b),当a≠b时,ANSa+=f[a][b],ANSb+=!f[a][b]
代码细节:
其实没啥细节。请参考代码部分。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 const int win[5][5]={{0,0,1,1,0}, 8 {1,0,0,1,0}, 9 {0,1,0,0,1}, 10 {0,0,1,0,1}, 11 {1,1,0,0,0}}; 12 13 //variable// 14 int n,na,nb,a[300],b[300]; 15 16 //solve//noip day1 t1 17 int main(){ 18 scanf("%d%d%d",&n,&na,&nb); 19 for (int i=0;i<na;++i){ 20 scanf("%d",a+i); 21 } 22 for (int i=0;i<nb;++i){ 23 scanf("%d",b+i); 24 } 25 int ansa=0,ansb=0; 26 for (int i=0,j=0,tot=0;tot<n;++tot,i=(i+1)%na,j=(j+1)%nb){ 27 if (a[i]!=b[j]){ 28 ansa+=win[a[i]][b[j]]; 29 ansb+=!win[a[i]][b[j]]; 30 } 31 } 32 printf("%d %d\n",ansa,ansb); 33 return 0; 34 }