題面
首先答案只有−1
,1,2
三種。 若s
不為回文串,答案顯然為1。
若s為回文串,假設答案
>
2,那麼從任意地方切開該串分成的兩個串中至少有乙個回文串。
假設一二位相等,第乙個出現的與第一位不同的字母不在正中間,即aa
...b
...b
...a
a ,那麼因為字首aa
...b
不回文,那麼後面一定回文,導致兩個
b 中無論怎麼放
a都無法滿足條件。
假設一二位不等,即ab
...b
a ,因為字首ab
不回文,所以導致必須是ab
ab..
.ba ,一直推下去就是ab
aba.
....
.aba
ba。
所以只要不是形如aa
a...
aaa (全相同),aa
...b
...a
a (除正中間全相同),ab
aba.
....
.aba
ba(交替出現),答案均為2,否則為-1。
**:
#include
#include
#include
using
namespace
std;
const
int maxn=100010;
int n,ans,len[12];
char s[maxn],t[maxn],st[12][12];
bool check(char *s,int l,int r)
int spc2()
for(int i=n-n/2+1;i<=n;i++)
if(s[i]!=s[1])
if(flag) return -1;
if(n&1)
}else
if(s[i]!=s[2])
}if(flag) return -1;
}return
2;
}int main()
printf("%d\n",spc2());
}return
0;}
2018雅禮 折射
雅禮題好難啊。這個dp題思路好強。這個東西首先一眼就知道按y排的dp怎麼寫,大概就是設 f i,j,k 表示考慮到y座標從大到小排名為i的點,這線上一次轉是j,上上次轉是k的數量,直接二維限制轉移就行了。考慮這東西怎麼優化。字首和能搞時間,woc空間也被卡了?打出來表看一看?這個dp陣列有好多都是空...
雅禮集訓 1 2 取石子遊戲
題目描述 有 n 堆石子,第 i 堆有 xi 個。alice 和 bob 輪流取石子 先後手未定 alice 每次從一堆中取走 a 個,bob 每次從一堆中取走 b 個,無法操作者輸。不難發現只會有四種情況 alice 必勝 bob 必勝 先手必勝 後手必勝。你需要選定若干堆石子 共有 2 n 種方...
雅禮集訓 2018 Day4 Magic
傳送門本部分 於 這位大佬 題中要求本質不同的序列數量,不太好搞。我們考慮給相同顏色的牌加上編號,這樣所有牌都不相同。那麼如果我們求出了答案,只需要將答案除以 prod a i 就好了。恰好有 k 對 不能直接求,考慮容斥,如果我們求出了 g x 表示至少有 x 對的方案數,那麼答案即為 sum l...