CF-1147D Palindrome XOR (建图划分等价类)
生活随笔
收集整理的這篇文章主要介紹了
CF-1147D Palindrome XOR (建图划分等价类)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
CF-1147D Palindrome XOR (建圖劃分等價(jià)類)
題目鏈接
題意
給一個(gè)長(zhǎng)度為n的01串c(可能存在’?’,表示可以為0或是1)
問多少個(gè)數(shù)對(duì)(a,b)滿足:
思路
建圖劃分等價(jià)類
枚舉a的長(zhǎng)度[1, n-1]
0:表示兩個(gè)數(shù)字相同
1:表示兩個(gè)數(shù)字不同
回文串對(duì)應(yīng)的位置建0邊
按照異或結(jié)果建0,1邊
因?yàn)橛心J(rèn)限制a,b的起始位置為1,a的前置位為0,所以需要另找兩個(gè)點(diǎn)表示這種關(guān)系,否則會(huì)多出幾塊.
最后dfs判斷合法性,并計(jì)算一共分成幾塊,答案就是2的冪次
#include <bits/stdc++.h> using namespace std; const int mod = 998244353; const int maxn = 2e3 + 5; char s[maxn]; int vis[maxn]; vector<pair<int,int>> g[maxn]; void add(int u, int v, int c) {g[u].push_back(make_pair(v, c));g[v].push_back(make_pair(u, c)); } int check(int u) {if (vis[u] == -1) vis[u] = 0;for (int i = 0; i < (int)g[u].size(); ++i) {int v, c;tie(v, c) = g[u][i];if (vis[v] == -1) {vis[v] = c ? vis[u]^1 : vis[u];if (check(v) == 0) return 0;}else {if ((c && vis[v] == vis[u]) || (!c && vis[v] != vis[u])) return 0;}}return 1; } long long Pow(long long a, long long b) {long long ret = 1;while (b) {if (b & 1) {ret *= a;ret %= mod;}a *= a;a %= mod;b >>= 1;}return ret; } long long solve(int n, int m) {for (int i = 0; i < maxn; ++i) g[i].clear();for (int i = 1; i <= n/2; ++i) add(i, n+1-i, 0);for (int i = 1; i <= m/2; ++i) add(n+n-m+i, n+n+1-i, 0);for (int i = 1; i <= n; ++i) {if (s[i-1] == '?') continue;add(i, i+n, s[i-1]-'0');}add(2*n+1, 1, 0); // 2*n+1 : 1add(2*n+1, n+n-m+1, 0);for (int i = 1; i <= n-m; ++i) add(2*n+2, i+n, 0); // 2*n+2 : 0int cnt = 0;fill(vis, vis+maxn, -1);for (int i = 1; i <= 2*n+2; ++i) {if (vis[i] != -1) continue;if (check(i)) cnt++;else return 0;}return Pow(2, cnt-1); // 默認(rèn)b的首位為1,a的首位為0 } int main() {scanf("%s", s);int len = strlen(s);long long ans = 0;for (int i = 1; i < len; ++i) {ans += solve(len, i);ans %= mod;}printf("%lld\n", ans % mod);return 0; } 與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的CF-1147D Palindrome XOR (建图划分等价类)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CF-1238E. Keyboard P
- 下一篇: CF-1023F.Mobile Phon