Gym100814B Gym100814F Gym100814I(异或) ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology

时间:2020-12-02 12:24:49

今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧。。。

Gym100814B Gym100814F Gym100814I(异或)  ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology

Gym100814B Gym100814F Gym100814I(异或)  ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology

这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把标准答案推出来。

因为是选择题,答案就是A,B,C,D里的一个,如果A,B,C,都不对,那就是D对。如果不确定就是?,就是这样的题目。

一开始写的忘记判断如果三个选项都不对,那么剩下的就是答案这个了。。。

代码写的很丑,想不到简单的写法。。。

代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=+;
struct node{
char ans;
char pd;
char t[];
}s[N];
char da[N];
int main(){
int t,n,m;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
memset(da,'?',sizeof(da));
for(int i=;i<n;i++){
for(int j=;j<;j++){
if(j==)s[i].t[j]='A';
if(j==)s[i].t[j]='B';
if(j==)s[i].t[j]='C';
if(j==)s[i].t[j]='D';
}
}
while(m--){
for(int i=;i<n;i++){
cin>>s[i].ans>>s[i].pd;
if(s[i].pd=='T'&&da[i]=='?')da[i]=s[i].ans;
if(s[i].pd=='F'&&s[i].ans=='A')s[i].t[]='';
if(s[i].pd=='F'&&s[i].ans=='B')s[i].t[]='';
if(s[i].pd=='F'&&s[i].ans=='C')s[i].t[]='';
if(s[i].pd=='F'&&s[i].ans=='D')s[i].t[]='';
}
}
for(int i=;i<n;i++){
int ret=;char qwe='';
for(int j=;j<;j++){
if(s[i].t[j]=='')ret++;
if(s[i].t[j]!='')qwe=s[i].t[j];
}
if(ret==&&da[i]=='?')da[i]=qwe;
}
for(int i=;i<n-;i++)
printf("%c ",da[i]);
printf("%c\n",da[n-]);
}
return ;
}