PAT 甲级 1148 PAT Ranking 个人错误总结

耗费了近两个小时吧。
自己一个小时写出来差一个点的,不过估计考场上真的写不出来,中间debug心态大崩,我一开始直接想的是遍历每个说谎者组合,写了100多行,后来看了柳神,,太厉害了。
用-1而不用bool可以使用乘法判断二者异或,并且还能用加法等于0判断是否刚好有一个狼人说谎。真的佩服佩服。
ac代码(看六神自己写的,没柳神的好):

#include<bits/stdc++.h>
using namespace std;
int player[101]={};
int wolf[101];
int main(){
	int n;
	vector<int>lie;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&player[i]);
	}
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			fill(wolf,wolf+101,1);
			wolf[i]=-1;
			wolf[j]=-1;
			lie.clear();
			for(int k=1;k<=n;k++){
				if(player[k]*wolf[abs(player[k])]<0) lie.push_back(k);
			}
			if(lie.size()==2){
				if(player[i]*wolf[abs(player[i])]>0||player[j]*wolf[abs(player[j])]>0)
				if(!(player[i]*wolf[abs(player[i])]>0&&player[j]*wolf[abs(player[j])]>0)){
				printf("%d %d",i,j);return 0;	
				}	
			}
			
		}
	}
	printf("No Solution");
    return 0;
}
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页