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 }
View Code

 

posted @ 2015-09-10 13:43  DeAR3327  阅读(237)  评论(0编辑  收藏  举报