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...