題目大意:一開始給你乙個字串s,n次操作每次把s的後ai個字元放到前面來拼在原串後面,也就是每次長度倍增。操作完後q組詢問l到r區間字元c出現了幾次。s和k不超過100,n和q不超過1e5,l和r不超過1e18。
題解:直接搞乙個solve(k,n,c)表示操作k次前n個字元c出現的次數,那麼根據n和|s|*2^k(+a[k])的大小關係直接計算即可,記憶化ans(k,n,c)表示第k次操作當n<=a[k]的時候字元c出現的次數才能夠保證複雜度。
事實上還可以可持久化treap,這樣複雜度就不是很依賴於ai了。
#include
#include
#include
#include
#include
#define gc getchar()
#define mxl 60
#define n 100010
#define inf 1000000000000000000ll
#define lint long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define debug(x) cerr<<#x<<"="<#define sp <<" "
#define ln namespace
std;
int a[n],c[26][110],m;bool ask[26][mxl+10][110];
lint mi[mxl+10],ans[26][mxl+10][110];char s[110];
inline
int inn()
inline lint inln()
inline
int gtc(int x=0)
lint solve(lint n,int l,int ch);
inline lint calc(int k,lint p,int ch)
inline lint solve(lint n,int l,int ch)
int main()
printf("%lld\n",solve(r,l,ch)-solve(l-1,l,ch));
}return
0;}
亂搞 正確姿勢的亂搞 模擬退火
模擬退火大概原理就是將熱力學裡面金屬退火的原理放在了統計學意義中。其在電腦科學中的應用也是很可觀的 處理一些無法用多項式時間複雜度解決的np問題。對於一些最優化問題,往往我們可以轉化為乙個神奇的函式 引數不限 比如像這樣 如果這個函式滿足單峰性,我們往往可以直接套用三分來處理,但是都說了這如果是乙個...
亂搞 Evensgn 的債務
時間限制 1 sec 記憶體限制 128 mb evensgn 有一群好朋友,他們經常互相借錢。假如說有三個好朋友 a,b,c。a 欠 b 20 元,b 欠 c 20 元,總債務規模為 20 20 40 元。evensgn 是個追求簡約 的人,他覺得這樣的債務太繁雜了。他認為,上面的債務可以完全等價...
3770 瘋狂的限制 亂搞
從左到右列舉子串的右區間,同時維護每個位置作為子串的左區間時能滿足的限制條件個數,將滿足條件個數在 l,r 的左區間統計入答案即可。設當前列舉的右區間為i,位置x作為左區間時滿足的限制條件個數為a x 現在將右區間改為i 1,如何維護a 首先a i 1 可以o k 判斷。對於某個限定條件c x l ...