这是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; }