崔冷亦 发表于 2024-1-7 18:09:26

luoguP1039

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
struct p{
        int id;
        string sen;
}b;
map<string,int> ma;
string a;
string d[]=
{
        "Today is Sunday.",
        "Today is Monday.",
        "Today is Tuesday.",
        "Today is Wednesday.",
        "Today is Thursday.",
        "Today is Friday.",
        "Today is Saturday.",
};
int n,m,q;
int T,F,ans,ansf;
int TF;
bool pdtf(int id,bool fl)
{
        if(TF==-1)
        {
                TF=fl;
                if(fl) ++T;
                else ++F;
        }
        else
                return TF!=fl;
        if(F>n||T>m-n)        return 1;
        return 0;
}
void pd(int id,int day)
{
        T=F=0;
        memset(TF,-1,sizeof TF);
        for(int i=1;i<=q;i++)
        {
                int flag=b.sen.find("I am guilty.");
                if(flag!=-1)
                {
                        if(pdtf(b.id,b.id==id)) return;
                }
                flag=b.sen.find("I am not guilty.");
                if(flag!=-1)
                {
                        if(pdtf(b.id,b.id!=id)) return;
                }
                flag=b.sen.find(" is guilty.");
                if(flag!=-1)
                {
                        string tmp=b.sen;
                        tmp.erase(flag,11);
                        if(pdtf(b.id,ma==id)) return;
                }
                flag=b.sen.find(" is not guilty.");
                if(flag!=-1)
                {
                        string tmp=b.sen;
                        tmp.erase(flag,15);
                        if(pdtf(b.id,ma!=id)) return;
                }
                flag=b.sen.find("Today is ");
                if(flag!=-1)
                {
                        if(pdtf(b.id,d==b.sen)) return;
                }
        }
        if(ans!=0&&ans!=id) ansf=1;
        ans=id;
}
int main()
{
        cin>>n>>m>>q;
        for(int i=1;i<=n;i++)
        {
                cin>>a;ma]=i;
        }
        for(int i=1;i<=q;i++)
        {
                string name,s;
                cin>>name;
                name.erase(name.length()-1);
                getline(cin,b.sen);
                b.sen.erase(0,1);
                if(b.sen.sen.length()-1]=='\n'||b.sen.sen.length()-1]=='\r')
                        b.sen.erase(b.sen.length()-1);
                b.id=ma;
        }
        for(int i=1;i<=n;i++)
        {
                for(int j=0;j<7;j++)
                {
                        pd(i,j);
                        /*if(ansf==1)
                        {
                                cout<<"Cannot Determin";
                                return 0;
                        }*/
                }
        }
        if(ans==0) cout<<"Impossible";
        else cout<<a;
        return 0;
}

崔冷亦 发表于 2024-1-7 18:10:46

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
struct p{
        int id;
        string sen;
}b;
map<string,int> ma;
string a;
string d[]=
{
        "Today is Sunday.",
        "Today is Monday.",
        "Today is Tuesday.",
        "Today is Wednesday.",
        "Today is Thursday.",
        "Today is Friday.",
        "Today is Saturday.",
};
int n,m,q;
int T,F,ans,ansf;
int TF;
bool pdtf(int id,bool fl)
{
        if(TF==-1)
        {
                TF=fl;
                if(fl) ++T;
                else ++F;
        }
        else
                return TF!=fl;
        if(F>n||T>m-n)        return 1;
        return 0;
}
void pd(int id,int day)
{
        T=F=0;
        memset(TF,-1,sizeof TF);
        for(int i=1;i<=q;i++)
        {
                int flag=b.sen.find("I am guilty.");
                if(flag!=-1)
                {
                        if(pdtf(b.id,b.id==id)) return;
                }
                flag=b.sen.find("I am not guilty.");
                if(flag!=-1)
                {
                        if(pdtf(b.id,b.id!=id)) return;
                }
                flag=b.sen.find(" is guilty.");
                if(flag!=-1)
                {
                        string tmp=b.sen;
                        tmp.erase(flag,11);
                        if(pdtf(b.id,ma==id)) return;
                }
                flag=b.sen.find(" is not guilty.");
                if(flag!=-1)
                {
                        string tmp=b.sen;
                        tmp.erase(flag,15);
                        if(pdtf(b.id,ma!=id)) return;
                }
                flag=b.sen.find("Today is ");
                if(flag!=-1)
                {
                        if(pdtf(b.id,d==b.sen)) return;
                }
        }
        if(ans!=0&&ans!=id) ansf=1;
        ans=id;
}
int main()
{
        cin>>n>>m>>q;
        for(int i=1;i<=n;i++)
        {
                cin>>a;ma]=i;
        }
        for(int i=1;i<=q;i++)
        {
                string name,s;
                cin>>name;
                name.erase(name.length()-1);
                getline(cin,b.sen);
                b.sen.erase(0,1);
                if(b.sen.sen.length()-1]=='\n'||b.sen.sen.length()-1]=='\r')
                        b.sen.erase(b.sen.length()-1);
                b.id=ma;
        }
        for(int i=1;i<=n;i++)
        {
                for(int j=0;j<7;j++)
                {
                        pd(i,j);
                        /*if(ansf==1)
                        {
                                cout<<"Cannot Determin";
                                return 0;
                        }*/
                }
        }
        if(ans==0) cout<<"Impossible";
        else cout<<a;
        return 0;
}

崔冷亦 发表于 2024-1-7 18:11:21

#include<iostream>
#include<map>
#include<cstring>
using namespace std;
struct p{
        int id;
        string sen;
}b;
map<string,int> ma;
string a;
string d[]=
{
        "Today is Sunday.",
        "Today is Monday.",
        "Today is Tuesday.",
        "Today is Wednesday.",
        "Today is Thursday.",
        "Today is Friday.",
        "Today is Saturday.",
};
int n,m,q;
int T,F,ans,ansf;
int TF;
bool pdtf(int id,bool fl)
{
        if(TF==-1)
        {
                TF=fl;
                if(fl) ++T;
                else ++F;
        }
        else
                return TF!=fl;
        if(F>n||T>m-n)        return 1;
        return 0;
}
void pd(int id,int day)
{
        T=F=0;
        memset(TF,-1,sizeof TF);
        for(int i=1;i<=q;i++)
        {
                int flag=b.sen.find("I am guilty.");
                if(flag!=-1)
                {
                        if(pdtf(b.id,b.id==id)) return;
                }
                flag=b.sen.find("I am not guilty.");
                if(flag!=-1)
                {
                        if(pdtf(b.id,b.id!=id)) return;
                }
                flag=b.sen.find(" is guilty.");
                if(flag!=-1)
                {
                        string tmp=b.sen;
                        tmp.erase(flag,11);
                        if(pdtf(b.id,ma==id)) return;
                }
                flag=b.sen.find(" is not guilty.");
                if(flag!=-1)
                {
                        string tmp=b.sen;
                        tmp.erase(flag,15);
                        if(pdtf(b.id,ma!=id)) return;
                }
                flag=b.sen.find("Today is ");
                if(flag!=-1)
                {
                        if(pdtf(b.id,d==b.sen)) return;
                }
        }
        if(ans!=0&&ans!=id) ansf=1;
        ans=id;
}
int main()
{
        cin>>n>>m>>q;
        for(int i=1;i<=n;i++)
        {
                cin>>a;ma]=i;
        }
        for(int i=1;i<=q;i++)
        {
                string name,s;
                cin>>name;
                name.erase(name.length()-1);
                getline(cin,b.sen);
                b.sen.erase(0,1);
                if(b.sen.sen.length()-1]=='\n'||b.sen.sen.length()-1]=='\r')
                        b.sen.erase(b.sen.length()-1);
                b.id=ma;
        }
        for(int i=1;i<=n;i++)
        {
                for(int j=0;j<7;j++)
                {
                        pd(i,j);
                        /*if(ansf==1)
                        {
                                cout<<"Cannot Determin";
                                return 0;
                        }*/
                }
        }
        if(ans==0) cout<<"Impossible";
        else cout<<a;
        return 0;
}
页: [1]
查看完整版本: luoguP1039