Unaccepted 100 求调
查看原帖
Unaccepted 100 求调
712337
XYQ_102楼主2024/10/4 07:19
#include<bits/stdc++.h>
using namespace std;
string syntax[5]={"am guilty","am not guilty","is guilty.","is not guilty."};
string week[8]={" ","is Monday","is Tuesday","is Wednesday","is Thursday","is Friday","is Saturday","is Sunday"};
int N,M,P;
string name[30],sentence[30];
map<string,int> Map;
struct person
{
    bool isGuilty;
    int markedWeek;
    int markedStatus[30];
    vector<int> guiltyList,notGuiltyList;
}a[30];
bool status[30];
int work(int day,int person)
{
    int cnt=0,tmp=0;
    for(int i=1;i<=N;i++)
	{
        bool f_true=0,f_false=0;
        if(a[i].isGuilty || (a[i].markedWeek && a[i].markedWeek!=day))
            f_false=1;
        if(a[i].markedStatus[person]==-1)
            f_false=1;
        if(a[i].markedStatus[person]==1)
			f_true=1;
        if(i!=person && a[i].markedStatus[i]==1)
            f_false=1;
        for(int j=0;j<a[i].guiltyList.size();j++)
			if(a[i].guiltyList[j]!=person)
            	f_false=1;
        for(int j=0;j<a[i].notGuiltyList.size();j++)
			if(a[i].notGuiltyList[j]!=person)
            	f_true=1;
        if(a[i].markedWeek==day)
			f_true=1;
        if(i==person && a[i].markedStatus[person]==1) 
			f_true=1;
        if(i!=person && a[i].markedStatus[i]==-1) 
			f_true=1;
        if(f_true && f_false)
			return 0;
        if(f_false)
			tmp++;
        if(!f_true && !f_false)
			cnt++;
    }
    if(tmp>M)
		return 0;
    if(tmp+cnt<M)
		return 0;
    return 1;
}
int target=0;
void solve(){
    
    return;
}
int main(){
    cin>>N>>M>>P;
    for(int i=1;i<=N;i++){
        cin>>name[i];
        Map[name[i]]=i;
    }
    for(int i=1;i<=P;++i)
	{
        cin>>sentence[i];
        sentence[i]=sentence[i].substr(0,sentence[i].find(':'));
        int id=Map[sentence[i]];
        getchar();
        getline(cin,sentence[i]);
        if(sentence[i][0]=='I')
		{
            if(sentence[i].find(syntax[0])!=-1)
			{
                a[id].markedStatus[id]=1;    
				continue;
            }
            else if(sentence[i].find(syntax[1])!=-1)
			{
                a[id].markedStatus[id]=-1;    
				continue;
            }
        }
        else
		{
            int tmp=0;
            tmp=sentence[i].find(syntax[2]);
            if(tmp!=-1)
			{
                sentence[i]=sentence[i].substr(0,tmp-1);
                a[id].markedStatus[Map[sentence[i]]]=1;
                a[id].guiltyList.push_back(Map[sentence[i]]);
                continue;
            }
            tmp=sentence[i].find(syntax[3]);
            if(tmp!=-1)
			{
                sentence[i]=sentence[i].substr(0,tmp-1);
                a[id].markedStatus[Map[sentence[i]]]=-1;
                a[id].notGuiltyList.push_back(Map[sentence[i]]);
                continue;
            }
            for(int j=1;j<=7;j++)
            {
                tmp=sentence[i].find(week[j]);
                if(tmp!=-1)
				{
                    if(!a[id].markedWeek)
                        a[id].markedWeek=j;
                    else 
						a[id].isGuilty=1;
                    break;
                }
            }
        }
    }
    int tmp=0;
    for(int i=1;i<=7;i++)
		for(int j=1;j<=N;j++)
      	{
          	if(status[j])
			  	continue;
        	if(work(i,j))
			{
	            ++tmp;
	            status[j]=1;
	            if(tmp>=2)
	                puts("Cannot Determine"),exit(0);
            	target=j;
        	}
    	}
    if(!target)
		puts("Impossible");
    cout<<name[target];
    return 0;
}

rt,Subtask 1 WA

2024/10/4 07:19
加载中...