关于getline读入string
查看原帖
关于getline读入string
483966
一粒夸克楼主2021/9/2 11:34

我在本题中用getline 读入证词,在本机上(用的noilinux)去掉最后一个字符,输出看起来还是正常的,但与其它字符串匹配不上。

在洛谷上必须要去掉才能过

洛谷的测评环境不是 linux 吗

代码:

#include<bits/stdc++.h>
using namespace std;
int m,n,p;
string name[25],say[105];
string s[7]={"Today is Sunday.","Today is Monday.","Today is Tuesday.","Today is Wednesday.","Today is Thursday.","Today is Friday.","Today is Saturday."};
int spkr[105],fake[25],err,ans;
inline void update(int who,int is){
	if(fake[who]*is==-1)err=1;
	else fake[who]=is;
}
int main(){
	scanf("%d%d%d",&m,&n,&p);
	for(int i=1;i<=m;i++)cin>>name[i];
	for(int i=1;i<=p;i++){
		string nam;cin>>nam;
		nam.erase(nam.end()-1);
		for(int j=1;j<=m;j++)if(name[j]==nam)spkr[i]=j;
		getline(cin,say[i]);
		say[i].erase(say[i].begin());say[i].erase(say[i].end()-1);
	}
	for(int day=0;day<7;day++){
		for(int fak=1;fak<=m;fak++){
			memset(fake,0,sizeof(fake));err=0;
			for(int i=1;i<=p;i++){
				int who=spkr[i];
//                cout<<i<<" "<<spkr[i]<<say[i]<<endl;
				for(int j=0;j<7;j++)if(say[i]==s[j])update(who,(j==day?1:-1));
				if(say[i]=="I am guilty.")update(who,(fak==who?1:-1));
				if(say[i]=="I am not guilty.")update(who,(fak!=who?1:-1));
				for(int j=1;j<=m;j++)if(say[i]==name[j]+" is guilty.")update(who,(j==fak?1:-1));
				for(int j=1;j<=m;j++)if(say[i]==name[j]+" is not guilty.")update(who,(j!=fak?1:-1));
			}
			if(err)continue;
			int cnt1=0,cnt2=0;
			for(int i=1;i<=m;i++){
				if(fake[i]==-1)cnt1++;
				if(fake[i]==0)cnt2++;
			}
			if(cnt1+cnt2>=n&&cnt1<=n){//cout<<cnt1<<" "<<cnt2<<endl;
				if(!ans)ans=fak;
				else if(fak!=ans){//cout<<name[ans]<<" "<<name[fak]<<endl;
					puts("Cannot Determine");
					return 0;
				}
			}
		}
	}
	if(!ans)puts("Impossible");
	else cout<<name[ans];

	return 0;
}
2021/9/2 11:34
加载中...