P1328 生活大爆炸版石头剪刀布

这是2014年提高组的一道简单的模拟题。

暴力就可以AC。首先给出一个表格,表示输赢的情况,根据这个表格,我们便可以开score[][]来记录对战的得分情况,千万不要忘记这是两方面的,也就是说表格灰色部分也是需要处理的(我一开始就没有考虑)。然后因为他按周期出牌,所以要填充到长度为n,所以有两个方法,一个是取余,一个是循环,然而我看数据不算大,果断选择了循环。然后就是进行对战,将分数进行++即可。

1.当调试发现思路和代码都没bug时就要去看数组开的对不对或者变量对不对。(特别时模拟样例都不对)

2.简单的题一定快速去做,另外题干长,形式新,不一定代表逻辑复杂或难AC

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int a_t,b_t;
int a_o[1000],b_o[1000];
int a_s,b_s;
int n;
int temp=0;
int score[5][5]={{0,0,1,1,0},{1,0,0,1,0},{0,1,0,0,1},{0,0,1,0,1},{1,1,0,0,0}};
int main(){
    cin>>n>>a_t>>b_t;
    for(int i=1;i<=a_t;i++){
        cin>>a_o[i];
    }
    for(int i=1;i<=b_t;i++){
        cin>>b_o[i];
    }
    temp=a_t+1;
    while(temp<=n){//填满 
        for(int i=1;i<=a_t;i++){
            a_o[temp]=a_o[i];
            temp++;
        }
    }
    temp=b_t+1;
    while(temp<=n){ 
        for(int i=1;i<=b_t;i++){
            b_o[temp]=b_o[i];
            temp++;
        }
    }    
    for(int i=1;i<=n;i++){
        a_s+=score[a_o[i]][b_o[i]];
        b_s+=score[b_o[i]][a_o[i]];
    //    cout<<a_s<<"  "<<b_s<<endl;
    }
    cout<<a_s<<" "<<b_s;
    return 0;
} 
原文地址:https://www.cnblogs.com/china-mjr/p/11342965.html