顯而易見有乙個記錄末尾字母的 \(o(n)\) 遞推。
顯而易見可以用矩陣快速冪優化,不妨用乙個 \(1\times 26\) 的矩陣維護當前dp 值,初始化為:
\[\begin
1&1&1\cdots 1&1&1
\end\]
構造乙個 \(26\times 26\) 的轉移矩陣,如果 \(i\) 不能轉移到 \(j\) 那麼 \((j,i)=0\) 否則 \((j,i)=1\),這個根據矩陣乘法定義來。
然後就做完了,記得開long long
,時間複雜度 \(o(\log n)\)。
code:
#includeusing namespace std;
typedef long long ll;
#define n 26
#define mod 1000000007
#define for(i,x,y)for(i=x;i<=(y);i++)
ll n;
string s1;
namespace subtask1
for(k,1,25)f[n&1][0]=(f[n&1][0]+f[n&1][k])%mod;
cout<>=1;
} for(i,0,25)ans=(ans+a.g[0][i])%mod;
cout<>n>>s1;
if(n>100000)subtask2::init();
else subtask1::init();
return 0;
}
TJOI2019 甲苯先生的線段樹
tjoi2019 甲苯先生的線段樹 首先原題 cf750g new year and binary tree paths 方法 滿二叉樹,鏈長為logn 考慮列舉lca為x,兩個鏈長h1,h2,發現x是唯一確定的!找到這個x,s減去都走左兒子的貢獻,再調整出右兒子 2 n 1 2 n,變成每一位的0...
TJOI2019 平衡樹 甲苯先生的滾榜
描述 甲苯先生在製作乙個online judge,他發現做比賽的人們很關心自己的排名 顯而易見 在acm賽制的比賽中,如果通過題目數量不相等,則通過題目數量多的人排名更靠前,如果通過題目數量相等,則罰時更少的人排名更高。甲苯先生想讓大家幫忙設計乙個程式,每次有人通過之後,就告訴他排名在他的前面有多少...
TJOI2019 甲苯先生的線段樹(數字DP)
tjoi2019難一點的就只有這道d2t3了,前面五道我共計花了三個小時,這一道花了將近兩個小時。五個小時ak兩天tjoi不是夢 但是說實話這道題並沒有什麼水平,沒考察什麼思維方面的東西,涉及到的性質也極其偏門,天津就靠這個來選拔省隊?怕不是反向選拔,反正天津今年也一塊金牌也沒有,這個鍋省選和省選出...