当前位置:网站首页>Winter messenger 2

Winter messenger 2

2022-07-05 06:19:00 Strezia

Link
Game theory ,sg function
I didn't understand the solution ,, Violence made a watch , At the beginning, I also operated 2 It's missing .
Looking at the solution means that every operation will make x x x Reduce , After doing several questions, I feel that if there are multiple operations , Then find the common ground of these operations , To write the transfer equation .

Code

int sg[1050];
int mex(vector<int> v) // v It can be vector、set Equal container 
{
    
    unordered_set<int> S;
    for (auto e : v)
        S.insert(e);
    for (int i = 0;; ++i)
        if (S.find(i) == S.end())
            return i;
}
int cal(int x) {
    
    if(sg[x] != -1) return sg[x];
    int t = x;
    vector<int> v;
    if(t & 1) {
    
        v.pb(cal(t - 1));
    }
    for(int i = 0; i < 10; i++) {
    
        if(!(t >> i)) break;
        if((t >> i) & 1) {
    
            int p = x ^ (1<<i);
            for(int j = i - 1; j >= 0; j--) {
    
                int q = p ^ (1<<j);
                v.pb(cal(q));
            }
        }
    }
    int a = mex(v);
    return sg[x] = a;
}
void solve() {
    
    int n;
    cin >> n;
    string s;
    cin >> s;
    int a = 0;
    for(int i = 0; i < n; i++) {
    
        if(s[i] == 'w')
            a = a + (1<<i);
    }
    if(sg[a]) cout << "Yes\n";
    else cout << "No\n";
}
signed main() {
    
     ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    memset(sg, -1, sizeof(sg));
    sg[0] = 0;
    for(int i = 1; i <= 1030; i++)
        cal(i);
    int T; cin >> T; while(T--)
        solve();
	return 0;
}
原网站

版权声明
本文为[Strezia]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140616367231.html