【description】
k理事長正在思考日本資訊學奧林匹克競賽選手的應援道具的logo問題。某天,k理事長突發奇想,想要設計乙個用』j』,』o』,』i』三種文字環形排列的logo,意為希望選手能從joi中收穫快樂的意思。
(注:「環形地」在日文中的表述為「円狀に」,「円」讀作「en」,再加上「joi」三個字即為「enjoy」„„)
如下所示,對於任意非負整數k,我們定義標號為k的joi序列sk為:
·s0為』j』,』o』,』i』中任一字元構成的長度為1的字串
·s[k+1]為最初4^k個字元都是』j』,接下來的4^k個字元都是』o』,接下來的4^k個字元都是』i』,最後4^k個字元是字串sk的長為4^(k+1)的字串
現在,k理事長在紙上寫下了由4^k個文字構成的乙個環形字串,字串中每個字元都是』j』,』o』,』i』中的乙個。k理事長想要修改一些文字,使得得到的字串從某個起點開始順時針讀一圈後可以得到sk。在滿足條件的情況下,要求修改的文字數量最少。
【input】
第一行乙個正整數k,表示k理事長在紙上寫下了乙個長度為4^k的環狀字串。
第二行乙個由』j』,』o』,』i』三個字元構成的長為4^k的字串,表示紙上的環形字串從某個起點出發順時針閱讀一圈得到的字串。
【output】
輸出一行乙個整數,表示修改文字數量的最小值。
【sample input】
2jjoijjojoiojoooi
【sample output】
7【hint】
從○標記的位置順時針閱讀一圈得到「jjjjooooiiiijoij」,滿足s2的條件,且修改文字數達到最小值7。
【data constraint】
對於30%的資料,1<=k<=5
對於100%的資料,1<=k<=10
暴力找起點,每一次都看當前區間匹配的個數,然後跳到下乙個小區間。到最後乙個區間時,長度為1,最後乙個點一定是匹配的,所以最後匹配數要加上1。由於每一次都找區間的匹配,且區間長度不同,所以考慮字首和:將前i個的所有的j、o、i儲存起來。由於題目描述說是乙個環,所以可以處理成2條鏈拼接在一起,然後列舉。時間複雜度o(k*4^k)。
1 #include2 #include3 #include4using
namespace
std;
5const
int maxn=1100000;6
char q[(maxn<<1
)];7
int f[(maxn<<1)][5];8
int k;int ans=99999999;9
int so=0
;10 inline void solve(int
x)11
25int
main()
2637 so=(1
<
));38
int qwer=so;
39for(int i=1;i<=tot*2;i++)
40solve(i);
41for(int i=1;i<=tot;i++)
4254 ans=min(ans,tot-qwe-1
);55
}56 printf("%d"
,ans);
57return0;
58 }
NOIP模擬 愉快的logo設計
k理事長正在思考日本資訊學奧林匹克競賽選手的應援道具的logo問題。某天,k理事長突發奇想,想要設計乙個用 j o i 三種文字環形排列的logo,意為希望選手能從joi中收穫快樂的意思。注 環形地 在日文中的表述為 円狀 円 讀作 en 再加上 joi 三個字即為 enjoy 如下所示,對於任意非...
NOIP模擬題 連通
給定乙個無向圖,請編寫乙個程式實現以下兩種操作 1 d x y,從原圖中刪除連線x和y頂點的邊。2 q x y,詢問x和y頂點是否連通。這也是連通問題,考慮用並查集解決。但是這是刪除的問題耶,怎麼辦?考慮將刪除變為連通,能不能將所有操作給反過來,從最後乙個操作開始處理。當然是可以的。include ...
Noip模擬題 山峰
description在n m的棋盤上不重複的填1到n m 如果乙個數字比周圍的八個數字大,那麼他就是乙個山峰。現在告訴你所有山峰的位置,問你填數的方案數mod 12345678 input 輸入第一行兩個數字 n m意義如題目描述。接下來n 行,每行 m個字元,表示非山峰,x 表示山峰。1 n 4...