本文共 3255 字,大约阅读时间需要 10 分钟。
问题描述
ABCDE中num个人做了好事,truth个人说真话。
A说:“我和X中有且只有一个做了好事” B说:“C和E中有人做了好事” C说:“我和D和A中有人做了好事” D说:“B和C都没有做好事” E说:“我没有做好事” 请问有哪些人做了好事? 多组方案请一行一个输出。输入格式
仅一行,先是一个整数num,接着是一个A~E的字符X,最后是一个整数truth。意义见题面。
输出格式
每行输出一组方案,方案中按 字母序 输出做好事的人的代号(A~E),不要空格隔开。
如果没有合法方案,输出一行一个0即可。样例输入
1 E 2
样例输出
0
样例输入
2 E 2
样例输出
BD
BE数据规模和约定
规定,1 <= num <= 2。
看了一会儿不会,,搜了一个dalao 的做法,。虽说暴力,,但是还是比较好理解的。。
因为数据规模num大于等于1,小于等于2.所以我们可以分成num=1,num=2这两种情况。
在这两种情况下,进一步分析可能的情况下,收到X的影响之后说真话的truth的情况。如下:#includeusing namespace std;int main(){ ios::sync_with_stdio(false); int num; cin>>num; string X; cin>>X; int truth; cin>>truth; set s; if (num==1){ if (truth==1){ if (X!="B"){ s.insert("B"); } } if(truth==2){ if (X=="B"){ s.insert("B"); } if (X!="E"){ s.insert("E"); } } if (truth==3){ if (X!="C"){ s.insert("C"); } if (X!="D"){ s.insert("D"); } if (X=="E"){ s.insert("E"); } } if (truth==4) { s.insert("A"); if (X=="C"){ s.insert("C"); } if (X=="D"){ s.insert("D"); } } } if (num==2){ if (truth==1){ if (X!="B"&&X!="E"){ s.insert("BE"); } } if (truth==2){ if (X=="B"){ s.insert("AB"); } if (X!="B"&&X!="D"){ s.insert("BD"); } if (X=="B"||X=="E"){ s.insert("BE"); } if ((X!="E")&&(X!="C")){ s.insert("CE"); } } if (truth==3) { if (X=="E"){ s.insert("AE"); } if (X!="B"){ s.insert("AB"); } if (X=="C"){ s.insert("AC"); }if (X=="D"){ s.insert("AD"); }if (X!="E"){ s.insert("AE"); } if (X!="B"&&X!="C"){ s.insert("BC"); } if (X=="B"||X=="D"){ s.insert("BD"); } if (X!="D"&&X!="C"){ s.insert("CD"); } if (X=="C"||X=="E"){ s.insert("CE"); } if (X!="D"&&X!="E"){ s.insert("DE"); } } if (truth==4){ if (X!="C"){ s.insert("AC"); } if (X!="D"){ s.insert("AD"); } if (X=="B"||X=="C"){ s.insert("BC"); } if (X=="C"||X=="D"){ s.insert("CD"); }if (X=="C"||X=="E"){ s.insert("DE"); } } } if (s.size()==0) puts("0"); for (set ::iterator it=s.begin();it!=s.end();it++){ cout<<*it<
转载地址:http://bxyzi.baihongyu.com/