hdu5157 不交叉回文對統計

2021-06-28 00:16:35 字數 1183 閱讀 8981

將新陣列的元素掃瞄一遍,標記需要更新點的起始和末了位置,起點++,終點--,最後統計以第i個字元為起點的數量時,將前i個累加起來即可。因為在[起點,終點]區間的元素都加上了起點的那個1,不在[起點,終點]區間的元素由於終點-1,因此沒有加到終點的那個1。本題需要考慮奇偶分類和邊界調節考慮等,十分繁雜,**無力orz...

#include#include#include#include#include#include#include#include#define ll long long

#define sf scanf

#define pf printf

#define inf 0x3f3f3f3f

#define maxn 110010

#define mem(a,b) memset(a,b,sizeof(a))

#define lowbit(x) x&(-x)

const ll mol=1000000007;

using namespace std;

char s[maxn<<2],str[maxn<<2];

int p[maxn<<2];

ll cntr[maxn<<2],cntl[maxn<<2],ans;

ll pre[maxn<<2],suf[maxn<<2];

int l;

void segadd(ll s,int l,int r)

void turn(ll s,int n)

int min(int a,int b)

void work()

turn(cntr,l);

turn(cntl,l);

pre[0]=0;

for(int i=1;i<=l;i++) pre[i]=pre[i-1]+cntr[i];

ans=0;

for(int i=1;ii) p[i]=min(p[2*id-i],mx-i);

else p[i]=1;

while(p[i]<=i&&s[i-p[i]]==s[i+p[i]]) p[i]++;

if(i+p[i]>mx)

}}int main(){

while(scanf("%s",s)!=eof){

l=strlen(s);

mem(p,0),mem(str,0);

str[0]='#';

for(int i=0;i

HDU 2037 今年暑假不AC

題目 hdu 2037 今年暑假不ac 解題思路 簡單貪心 對節目時間的結束時間由小到大進行排序,排序用sort或者qsort都可以,讓結束的早的時間排在前面,為後面的節目留出充足的時間,只要下乙個節目的的開始時間大於等於上乙個節目的結束時間就可以了。include includestruct ac...

HDU 2037 今年暑假不AC

problem description 今年暑假不ac?是的。那你幹什麼呢?看世界盃呀,笨蛋!確實如此,世界盃來了,球迷的節日也來了,估計很多acmer也會拋開電腦,奔向電視了。作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,你一定還會看一些其它的節目,比如新聞聯播 永遠不要忘記關心...

HDU 2037 今年暑假不AC

description 今年暑假不ac?是的。那你幹什麼呢?看世界盃呀,笨蛋!確實如此,世界盃來了,球迷的節日也來了,估計很多acmer也會拋開電腦,奔向電視了。作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,你一定還會看一些其它的節目,比如新聞聯播 永遠不要忘記關心國家大事 非常6...