UVA6284 狀態字首異或 hash

2021-08-03 10:55:09 字數 1084 閱讀 6241

題意:

給乙個字串,問有多少個區間能構成回文串。

構成要求只要滿足存在所有種類字元數量相等,或者只存在一種的個數是奇數。

思路:

由於字元比較少,考慮 252

狀壓,long long 還是吃的消的。

然後一直加入狀態,

先檢查這個狀態是否滿足。

我們可以看到對於狀態(單純考慮4位):

1 1 1 0

如何從他割掉一些狀態達到滿足,可以看到有1 0 0 0這個是吧,還有0 0 1 0/0 0 1 0/0 0 0 1

我們知道a ^ b = c,則a ^ c = b 。

那麼我們拿當前狀態抑或那些滿足的狀態就好了呀~查詢那些」要割的狀態」當前有多少

然後這裡很難受的要用手寫hash,map會超時。

而且要注意:

(1 << j) 如果爆了int 需要 (1**ll** << j)

#include 

using

namespace

std;

typedef

long

long ll;

const ll mod = 1e6+7;

const

int n=3e5+10;

bool vis[55];

char ch[n];

int n;

struct asdeg[2000010];

int head[1000007],sizes;

void init()

void add(ll a)

}eg[sizes].v = 1;

eg[sizes].id = a;

eg[sizes].nex = head[pos];

head[pos] = sizes++;

return;

}ll getv(ll a)

return0;}

long

long getch(char x)

int main()

return

0;}

狀態壓縮 uva11795

題意 第一行資料總數 接下來輸入機械人個數 再一行告訴你人能殺死哪些機械人,再n行告訴你機械人的 能怎麼互相殺死 思路 狀態壓縮 dp 偽轉移方程 dp 當前狀態 sum,其中i屬於 0,n 批註比較多的 includeusing namespace std int attack 17 每個機械人能...

UVa 10944 狀態壓縮DP

第一道狀態壓縮dp題,感覺要好好學習這種思維方式 首先設l的位置為 pointx 0 pointy 0 其他節點的位置為 pointx i pointy i 然後求出各個節點之間的距離dis i j max 我們用乙個n位2進製數 bn 1,b0 表示堅果收集情況的組合狀態 其中bi 0表示第i 1...

UVA 6625 狀態壓縮dp

這個題目的意思是給定k,n k,n 7 並給定k行每行有幾個連續的空格,所有的行左對齊,每一行最多7個,下面的行的空格數 上面相鄰行的空格數 給定乙個填數字的規則,當對於任意位置i,j num i j num i 1 j num i j num i j 1 問有 只用數字1 n 有多少種填滿空格的方...