解題報告:輸入n個字串,讓你求出可以用來區別這些字串的最少的字首總共有多少個字母。可以區別是指每個字串都取乙個自己的字首,同時保證所有取的這些字首沒有完全相同。
這題用字典樹可以做,就是輸入的時候把所有的字串都插入到字典樹中,最後把所有被走過不止一次的節點的值都加起來,每個節點的值表示這個節點被走過多少次,然後如果碰到這個節點的值是1的時候總和加1,同時要退出,後面的就不用統計了,因為這個節點只被走過一次,所以經過這個節點的那個字串到這裡已經是唯一的了。
#include#includeview code#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;
}
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...