求助,数据在本地能过但在洛谷上就WA了
查看原帖
求助,数据在本地能过但在洛谷上就WA了
812227
Sunrise_beforeglow楼主2024/10/22 16:58
#include <bits/stdc++.h>
using namespace std;
int m,n,p,flag[105],name[105],cnt,zhen;
string ans;
string x[105];
map<string,int>mp;
map<int,string>f;
string today[10]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
bool vjudge(int id,bool x)
{
    if(flag[id]==-1)
    {
        flag[id]=x;
        if(x==true)cnt++;
        else zhen++;
    }
    else if(flag[id]!=x)return true;
    if(cnt>n||zhen>m-n)return true;
    return false;
}
void check(string u,int g)
{
    memset(flag,-1,sizeof(flag));
    cnt=0,zhen=0;
    for(int i=1;i<=p;i++)
    {
        string talk=x[i];
        if(talk=="I am guilty.")
        {
            if(vjudge(name[i],name[i]!=g))return;
        }
        else if(talk=="I am not guilty.")
        {
            if(vjudge(name[i],name[i]==g))return;
        }
        int pos=talk.find("is guilty.");
        if(pos!=string::npos)
        {
            string jyq=talk.substr(0,pos-1);
            if(vjudge(name[i],mp[jyq]!=g))return;
        }
        pos=talk.find("is not guilty.");
        if(pos!=string::npos)
        {
            string OIbishop=talk.substr(0,pos-1);
            if(vjudge(name[i],mp[OIbishop]==g))return;
        }
        pos=talk.find("Today is");
        if(pos!=string::npos)
        {
            if(vjudge(name[i],talk!=u))return;
        }
    }
    if(ans!=f[g]&&ans!="")
    {
        cout<<"Cannot Determine"<<endl;
        exit(0);
    }
    else
    {
        ans=f[g];
    }
}
int main()
{
    cin>>m>>n>>p;
    for(int i=1;i<=m;i++)
    {
        string s;
        cin>>s;
        mp[s]=i;
        f[i]=s;
    }
    for(int i=1;i<=p;i++)
    {
        string a;
        cin>>a;
        name[i]=mp[a.substr(0,a.size()-1)];
        getline(cin,a);
        if((*a.begin())==' ')a=a.substr(1);
        if((*a.rbegin())=='\n')a=a.substr(0,a.size()-1);
        x[i]=a;
    }
    for(int i=1;i<=7;i++)
    {
        for(int j=1;j<=m;j++)
        {
            check("Today is "+today[i]+".",j);
        }
    }
    if(ans=="")cout<<"Impossible";
    else cout<<ans;
    return 0;
}
2024/10/22 16:58
加载中...