本地AC,提交tle求助
查看原帖
本地AC,提交tle求助
692274
hgckythgcfhk楼主2023/11/2 17:40
#include<bits/stdc++.h>
using namespace std;
#define void inline void
#define int register unsigned
string s[21];unordered_map<string,unsigned>id,wk;unsigned day;vector<string>ans;
struct A{unsigned short i,op,a;};vector<A>a;unsigned n,m,p;bitset<21>v,v1;
#define aa int x=i.a;if(ch[x]==2)return 1;ch[x]=1;
#define ab int x=i.a;if(ch[x]==1)return 1;ch[x]=2;
inline bool chk(){char ch[21];memset(ch,0,sizeof ch);day=0;v1.reset();vector<A>tmp(a);
	for(A&i:tmp)if(v[i.i]&&i.op<5)i.op&1?++i.op:--i.op;for(A i:tmp){switch(i.op){
case 1:{aa;break;}case 2:{ab;break;}case 3:{aa;break;}case 4:{ab;break;}
case 5:{if(!v[i.i]){if(day){if(i.a^day)return 1;}else day=i.a;}
else{v1[i.a]=1;if(v1[day])return 1;}break;}
}}for(int i=1;i<=n;++i)if(ch[i]==1)ans.emplace_back(s[i]);return 0;}
void out(){if(chk())return;if(ans.size()>1)cout<<"Cannot Determine",exit(0);cout<<ans[0];exit(0);}
void dfs(int i,int k){if(k==m)return out();if(i>n)return;dfs(i+1,k);v[i]=1;dfs(i+1,k+1),v[i]=0;}
#define debug for(int i=0;i<a.size();++i)cout<<s[a[i].i]<<" : "<<a[i].op<<' '<<a[i].a<<'\n';
#define ge getchar/*_unlocked*/()
#define ac \
if(_[3]=="not"){++d.op;\
	if(_[4]=="guilty."){if(_[5]!="")continue;}\
	else continue;\
}else if(_[3]=="guilty."){\
	if(_[4]!="")continue;\
}else continue;
signed main(){ios::sync_with_stdio(0);cin>>n>>m>>p;
wk["Monday."]=1;wk["Tuesday."]=2;wk["Wednesday."]=3;wk["Thursday."]=4;wk["Friday."]=5;wk["Saturday."]=6;wk["Sunday."]=7;
	for(int i=1;i<=n;++i)cin>>s[i],id[s[i]]=i;while(p--){vector<string>_;char c=ge;string t;while(c==0b1010)c=ge;
		while(c^0b1010)c==32?_.emplace_back(t),t="",0:c==':'?0:(t+=c,0),c=ge;_.emplace_back(t);_.resize(10);A d;d.i=id[_[0]];
		if(_[1]=="I"){
			d.a=d.i;     if(_[2]=="am"){d.op=1;ac;}else continue;
		}else if(id.count(_[1])){
			d.a=id[_[1]];if(_[2]=="is"){d.op=3;ac;}else continue;
		}else if(_[1]=="Today"){d.op=5;if(_[2]!="is")continue;if(wk.count(_[3]))d.a=wk[_[3]];if(_[4]!="")continue;
		}else continue;a.emplace_back(d);}dfs(1,0);cout<<"Impossible";}
2023/11/2 17:40
加载中...