求调
查看原帖
求调
1347622
davidyangjinpeng楼主2025/7/3 13:57

0pts

#include<bits/stdc++.h>
using namespace std;
int m,n,p;
string xq[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
map<string,int> name;
vector<pair<int,string>> zy;
bool pd(int zf,string s)
{
    if(s=="I am guilty.") return zf==1;
    if(s=="I am not guilty.") return zf!=1;
    if(s.find(" is guilty.")!=string::npos)
	{
        string t=s.substr(0,s.find(" is guilty."));
        return name[t]==1;
    }
    if(s.find(" is not guilty.")!=string::npos)
	{
        string t=s.substr(0,s.find(" is not guilty."));
        return name[t]!=1;
    }
    if(s.find("Today is ")!=string::npos)
	{
        string t=s.substr(9,s.find(".")-9);
        for(int i=0;i<7;i++) if(t==xq[i]) return i+1==zf;
    }
    return 1;
}
int main()
{
    cin>>m>>n>>p;
    for(int i=1;i<=m;i++)
	{
        string s;cin>>s;
        name[s]=0;
    }
    cin.ignore();
    for(int i=0;i<p;i++)
	{
        string s;getline(cin,s);
        int pos=s.find(": ");
        string nm=s.substr(0,pos);
        string z=s.substr(pos+2);
        zy.push_back({name[nm],z});
    }
    vector<string> ans;
    for(auto &x:name)
	{
        for(int d=1;d<=7;d++)
		{
            int jsh=0;
            for(auto &y:name) y.second=0;
            x.second=1;
            int jj=0;
            for(auto z:zy)
            {
                if(!pd(d,z.second))
				{
                    if(z.first==0) jj++;
                    else jsh++;
                }
            }
            if(jj<=n && jsh==n-jj) ans.push_back(x.first);
        }
    }
    sort(ans.begin(),ans.end());
    ans.erase(unique(ans.begin(),ans.end()),ans.end());
    if(ans.size()==1) cout<<ans[0];
    else if(ans.empty()) cout<<"Impossible";
    else cout<<"Cannot Determine";
    return 0;
}
2025/7/3 13:57
加载中...