#include<bits/stdc++.h>#defineendl'\n'#definelllonglong#defineullunsignedlonglong#defineldlongdouble#defineall(x) x.begin(), x.end()#definemem(x, d)memset(x, d,sizeof(x))#defineeps1e-6usingnamespace std;constint maxn =2e6+9;constint mod =1e9+7;constint inf =0x3f3f3f3f;const ll INF =0x3f3f3f3f3f3f3f3f;
ll n, m, k;int sg[maxn], mp[30], vis[30];
string s;int ans =0;intget(){mem(vis,0);for(int i =1; i <=26;++i){if(mp[i]!= n +1) vis[sg[mp[i]]]=1;}for(int i =0;;++i)if(!vis[i])return i;}voidwork(){cin >> s;n = s.size();s ="@"+ s;for(int i =1; i <=26;++i) mp[i]= n +1;for(int i = n; i >=1;--i){s[i]-='a'-1;sg[i]=get();mp[s[i]]= i;}cout <<(get()?"kou":"yukari");}intmain(){ios::sync_with_stdio(0);// int TT;cin>>TT;while(TT--)work();return0;}
#include<bits/stdc++.h>#defineendl'\n'#definelllonglong#defineullunsignedlonglong#defineldlongdouble#defineall(x) x.begin(), x.end()#definemem(x, d)memset(x, d,sizeof(x))#defineeps1e-6usingnamespace std;constint maxn =2e6+9;constint mod =1e9+7;constint inf =0x3f3f3f3f;const ll INF =0x3f3f3f3f3f3f3f3f;
ll n, m;
string s;
bitset <109> vis;int sg[maxn];voidinit(){for(int i =1; i <1<<10;++i)// 二進制枚舉預處理所有01串狀態{vis.reset();for(int j =0; j <10;++j){if(i &(1<< j))// 第j位為1 {if(j ==0) vis[sg[i ^(1<< j)]]=1;//操作二 else{for(int k =0; k < j;++k) vis[sg[i ^(1<< j)^(1<< k)]]=1;// 操作一 }}while(vis[sg[i]])++sg[i];//狀態i的sg函數 }}}voidwork(){cin >> n >> s;int st =0;for(int i =0; i < n;++i)if(s[i]=='w') st |=1<<(i);cout <<(sg[st]?"Yes":"No")<< endl;}intmain(){ios::sync_with_stdio(0);init();int TT;cin>>TT;while(TT--)work();return0;}
D 與 S 思路: kkk 個關鍵點是必勝點,如果一個節點直接連著連著兩個必勝點,那么這個點就會變成必勝點,把初始的 kkk 個點放入隊列不斷更新即可 code:
#include<bits/stdc++.h>#defineendl'\n'#definelllonglong#defineullunsignedlonglong#defineldlongdouble#defineall(x) x.begin(), x.end()#definemem(x, d)memset(x, d,sizeof(x))#defineeps1e-6usingnamespace std;constint maxn =1e6+9;constint mod =1e9+7;constint inf =0x3f3f3f3f;const ll INF =0x3f3f3f3f3f3f3f3f;
ll n, m, k;
vector <int> e[maxn];int sg[maxn], deg[maxn];voidwork(){cin >> n >> m >> k;for(int i =1; i <= n;++i) e[i].clear(), sg[i]= deg[i]=0;queue <int> q;for(int i =1; i <= k;++i){int x;cin >> x;sg[x]=1;q.push(x);}for(int i =1; i <= m;++i){int x, y;cin >> x >> y;e[x].push_back(y);e[y].push_back(x);}while(!q.empty()){int x = q.front();q.pop();for(auto to : e[x]){if(sg[to])continue;++deg[to];if(deg[to]>=2){sg[to]=1;q.push(to);}}}cout <<(sg[1]?"yes":"no")<< endl;}intmain(){ios::sync_with_stdio(0);int TT;cin>>TT;while(TT--)work();return0;}