dfs暴力模擬 Moo(洛谷 P1885)

2021-09-28 17:01:12 字數 1777 閱讀 7236

題目描述

奶牛bessie最近在學習字串操作,它用如下的規則逐一的構造出新的字串:

s(0) = 「moo」

s(1) = s(0) + 「m」+ 「ooo」 + s(0) = 「moo」 + 「m」 + 「ooo」 + 「moo」 = 「moomooomoo」

s(2) = s(1) + 「m」 + 「oooo」 + s(1) = 「moomooomoo」 + 「m」 + 「oooo」 + 「moomooomoo」 = 「moomooomoomoooomoomooomoo」

bessie就這樣產生字串,直到最後產生的那個字串長度不小於讀入的整數n才停止。

通過上面觀察,可以發現第k個字串是由:第k-1個字串 + 「m」 + (k+2個o) + 第k-1個字串連線起來的。

現在的問題是:給出乙個整數n (1 <= n <= 10^9),問第n個字元是字母『m』還是『o』?

輸入格式

乙個整數n。

輸出格式

乙個字元,m或者o

輸入 #1

輸出 #1

m

第 i 個字串的長度為 a[i]=2*a[i-1]+i+3; 先預處理出長度為 n 的字串是第幾個字串;也就是說要連線幾次;

解法一:

根據要連線幾次,然後把字串連線起來,求n的位置的字元;

但是只有80分,因為n的範圍為1e9;爆了空間;

#include

using

namespace std;

int n;

int a[

100000];

string dfs

(int p)

string ss="";

for(

int i=

1;i<=p+

2;i++

) ss+

="o"

; string b=

dfs(p-1)

;return b+

"m"+ss+b;

}int

main()

} string s=

dfs(ans)

; cout<

}

解法二:

看**模擬一下,應該就可以了吧;

#include

#define ll long long

#define pa pair

#define lson k<<1

#define rson k<<1|1

#define n 500100

#define m 2000010

using

namespace std;

int n;

int a[

100000];

void

dfs(

int p,

int q)

else

if(p<=a[q-1]

+q+3

)dfs

(p-a[q-1]

-q-3

,q-1);

}int

main()

}dfs

(n,ans)

;return0;

}

洛谷P1157 組合的輸出 DFS暴力

題目鏈結 這個題目和全排列有一些不一樣 該題需要先從1 n中選擇m個數字,然後再對m個數字公升序排列。前半句,從n個數字選m個,普通的全排列可以做到,對m個數字公升序排列,那麼就在每一次選擇數字的時候從上次最後乙個出發就可以。主要也是我審題不清晰。include include include in...

洛谷P1161 開燈(暴力)

在一條無限長的路上,有一排無限長的路燈,編號為1,2,3,4,1,2,3,4,1,2,3,4,每一盞燈只有兩種可能的狀態,開或者關。如果按一下某一盞燈的開關,那麼這盞燈的狀態將發生改變。如果原來是開,將變成關。如果原來是關,將變成開。在剛開始的時候,所有的燈都是關的。小明每次可以進行如下的操作 指定...

洛谷 P1019 單詞接龍 模擬,dfs深搜

分析ac code 題目傳送門 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beastbeast和astonishastonish,如果接成...