JSOI2013 快樂的 JYY 題解

2022-07-13 19:57:08 字數 852 閱讀 3973

題面傳送門

我們一句話題意:求兩個字串的公共回文子串的數量;

首先對於每個串構造乙個回文自動機,然後由pam的定義可知:對於pam上從根節點轉移方式相同所到達的點代表的回文串是相同的;

這樣對於兩個pam同時dfs,每次dfs到的節點的數值(在其原串中的出現數量)相乘,然後累加到答案裡;

注意:要從偶原點和奇原點各自跑一遍dfs;

#include #define inc(i,a,b) for(register int i=a;i<=b;i++)

#define dec(i,a,b) for(register int i=a;i>=b;i--)

using

namespace

std;

class

node2pam[

50010

];

long

long f[50010

];

int size=0

;

int root1=size++;

int root2=size++;

int last=root2;

void

set()

void add(int to,int

pos)

last=pam[u].ch[to];

f[last]++;

}}pam1,pam2;

long

long ans=0

;void dfs(int x,int

y) }

}int

main()

/*puppy

puppup

*/

JSOI2013 旅行時的困惑

傳送門 由於我們的圖不僅是乙個 text 而且在形態上還是一棵樹,也就是說我們為了實現節點之間互相可達,就必須把每條邊都覆蓋一次,因為兩個點之間的路徑是唯一的。那麼題意就變成了 每次在圖上選出一條路徑,覆蓋上面的邊,求最小的路徑數使得所有邊都被覆蓋至少一次。看到這裡我不禁聯想起這道題 那麼對於這道題...

題解 JSOI2013 旅行時的困惑

首先我們要思考乙個問題,公交線路要加到什麼程度才能夠使得任意兩個點兩兩可達 很容易知道每個點和他的父親必須兩兩可達 所以最終所有公交線路新增的邊其實就是把原來的邊全部反向 那麼這些邊要如何組成公交線路呢,必須要滿足,在這條公交線路中,邊的指向相同,要麼都向上,要麼都向下,或者原來向上,在某個點轉成向...

Jsoi2013 遊戲中的學問 解題報告

其實是很簡單的題,一開始想的有點麻煩了。一開始是這麼想的。f k,n i 3n n 1i 1 i 1 f k 1,n i i 3n n 1 n i f k 1,n i f k,n n 1n i 3nf k 1 n i n i 就是列舉第乙個人所屬的環長。但是其實不用這樣。f k,n n 1 n 2 ...