洛谷 1328 生活大爆炸版石头剪刀布(NOIp2014提高组)

【题解】

  简单粗暴的模拟题。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define LL long long
 5 #define rg register
 6 #define N 200010
 7 using namespace std;
 8 int n,ta,tb,a[N],b[N],ansa,ansb;
 9 inline int read(){
10     int k=0,f=1; char c=getchar();
11     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
12     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
13     return k*f;
14 }
15 inline int check(int a,int b){
16     if(a==0){
17         if(b==0) return 0;
18         else 
19             if(b==2||b==3) return 1;
20             else return 2;
21     }
22     if(a==1){
23         if(b==1) return 0;
24         else 
25             if(b==0||b==3) return 1;
26             else return 2; 
27     }
28     if(a==2){
29         if(b==2) return 0;
30         else 
31             if(b==1||b==4) return 1;
32             else return 2; 
33     }
34     if(a==3){
35         if(b==3) return 0;
36         else 
37             if(b==2||b==4) return 1;
38             else return 2; 
39     }
40     if(a==4){
41         if(b==4) return 0;
42         else 
43             if(b==0||b==1) return 1;
44             else return 2;
45     }
46     return 2;
47 }
48 int main(){
49     n=read(); ta=read(); tb=read();
50     for(rg int i=1;i<=ta;i++) a[i]=read();
51     for(rg int i=1;i<=tb;i++) b[i]=read();
52     for(rg int i=ta+1;i<=n;i++) a[i]=a[i-ta];
53     for(rg int i=tb+1;i<=n;i++) b[i]=b[i-tb];
54 //    for(rg int i=1;i<=n;i++) printf("%d ",a[i]); puts("");
55 //    for(rg int i=1;i<=n;i++) printf("%d ",b[i]); puts("");
56     for(rg int i=1;i<=n;i++){
57         int tmp=check(a[i],b[i]);
58         if(tmp==1) ansa++;
59         else if(tmp==2) ansb++;
60 //        printf("tmp=%d
",tmp);
61     }
62     printf("%d %d
",ansa,ansb);
63     return 0;
64 }
View Code
原文地址:https://www.cnblogs.com/DriverLao/p/9398207.html