HDU 5635 思維想法題

2021-09-09 09:17:14 字數 1226 閱讀 3519

peter has a string s=s1s2...sn, let suffi=sisi+1...sn be the suffix start with i-th character of s. peter knows the lcp (longest common prefix) of each two adjacent suffixes which denotes as ai=lcp(suffi,suffi+1)(1≤i題目大意:先輸入乙個t代表著測試組數,再輸入乙個n表示字串的長度,s1,s2,s2,s2.......接下去輸入n-1個數,表示的最長相同字首的長度。

即:以第二組測試資料為例

解題思路:

由於ai是相鄰字尾的最長公共字首lcp,那麼我們手寫幾個樣例對應的字串看看是不是有什麼規律,我們發現當a[i-1]!=0&&a[i] >= a[i-1]是不可能存在對應的字串的如 1 2 0或 1 1 0,就算是遞減的,也應該是依次減1的;同時a[i] <= n-i,即suff[i]與suff[i+1]的最長公共字首應該小於n-i的,存在限制關係。還有就是出現0的個數就是應該結果乘以25的個數,如果所給資料是存在非0解的,那麼結果最小解應該是26,所以初始化為26。

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define pi acos(-1.0)

#define e 1e-6

#define mod 1000000007

#define inf 0x3f3f3f3f

#define maxn 1010

using namespace std;

#define ll long long int

int n;

int a[100005],s[100005];

int main()

for(int j=1;j<=a[i];j++)}}

else

s[i]=ss++;

if(flag!=0)

break;

}ll ans=26;

tmp=s[n-1];

for(int i=n-2;i>=0;i--)

}if(flag!=0)

cout<

else

cout<

} return 0;

}

hdu4415 不錯的想法題

題意 乙個人他有一定的血,有一些怪物,他去殺怪物,有的怪物殺死他後還可以在不費自己血的情況下任意殺死一些怪物,問你他最多殺死多少怪物,在最多殺怪前提下最好用多少血,大體題意是這樣 思路 首先我們把怪物分成兩個集合,a乙個是殺死他後可以免費殺死其他人的,b另乙個是殺死他後不能免費殺死其他人的,分析下我...

hdu4415 不錯的想法題

題意 乙個人他有一定的血,有一些怪物,他去殺怪物,有的怪物殺死他後還可以在不費自己血的情況下任意殺死一些怪物,問你他最多殺死多少怪物,在最多殺怪前提下最好用多少血,大體題意是這樣 思路 首先我們把怪物分成兩個集合,a乙個是殺死他後可以免費殺死其他人的,b另乙個是殺死他後不能免費殺死其他人的,分析下我...

HDU4357 數學思維題

題目 string change 把26個字母看成0 25對應的數字,當數慢慢增大時就對26取模,則字串有乙個總和s1,要使其變為末狀態的總和s2 那麼每交換一次s1要加2,故,s1 s2必須為偶數。兩個字母單獨處理,兩個以上時,以三個數字為例,a,b,c 為三個數,則有 a,b,c a,c 1,b...