2023年湖南省程式設計競賽E題 最短的名字

2022-05-18 12:05:14 字數 1210 閱讀 6504

解題報告:輸入n個字串,讓你求出可以用來區別這些字串的最少的字首總共有多少個字母。可以區別是指每個字串都取乙個自己的字首,同時保證所有取的這些字首沒有完全相同。

這題用字典樹可以做,就是輸入的時候把所有的字串都插入到字典樹中,最後把所有被走過不止一次的節點的值都加起來,每個節點的值表示這個節點被走過多少次,然後如果碰到這個節點的值是1的時候總和加1,同時要退出,後面的就不用統計了,因為這個節點只被走過一次,所以經過這個節點的那個字串到這裡已經是唯一的了。

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1005

;char temp[1000005

];int

ans;

typedef

struct

node

*linklist;

void init(linklist&p)

void push(linklist p,char* str,int f,int

len)

else

push(p,str,f+1

,len);

}void

get_tot(linklist p)

else ans += p->tot;

for(int i = 0;i < 26;++i)

get_tot(p->ch[i]);

}void

clean(linklist p)

intmain()

//printf("%d %d %d %d\n",head->ch[0]->tot,head->ch[0]->ch[0]->tot,head->ch[0]->ch[1]->tot,head->ch[1]->tot);

ans = 0

;

for(int i = 0;i < 26;++i)

get_tot(head->ch[i]);

printf(

"%d\n

",ans);

clean(head);

}return0;

}

view code

2018湖南省程式設計競賽E題 動態開點線段樹

e.grid 省賽時沒寫出這個題,確實是線段樹水平太菜了,現在又想到了這個題,我靠水題。思路 這個題說白了就是求最大1 到1e9這個區間有多少個點被覆蓋,普通線段樹空間肯定不行,不過可以用動態開點解決,每次更新最多新花幾十個節點的空間,1e5次更新,最多隻需幾百萬的空間足夠,解決了這個問題就是水題了...

2018湖南省大學生程式設計競賽總結

先說戰績,3題銅牌滾粗。比賽開始前五分鐘就發了紙質檔題面,hsx一看發現a題是個水題,立馬就想到了思路 然後比賽開始五分鐘後1發ac,然後hsx去攻雅禮已經a了的d題 看榜發現湖大有個隊第22秒就a了 手速真他媽快 還發現有人a了b題和c題,我看b題,陽哥看c題,hsx攻d題,我讀懂了題意但是沒有什...

2023年湖南省程式設計大賽 A 近似回文詞

這題我們在訓練賽中沒做出來,事後xxs告訴我乙個非常吊的方法 列舉字串的中點,當不相等的字母超過2k時,break掉,沒超過的時候,更新最大長度 因為字串長度不是奇數就是偶數,所以我們列舉兩種字串即可 注意 字串中非字母不做比較 且 大寫字母化為小寫字母去比較 include include int...