御阪美琴 入門bfs STL

2021-09-01 16:12:18 字數 1108 閱讀 6363

misaka是呱太爺爺的小粉絲,呱太爺爺有一句話說的好:"一尺之棰,日取其半,萬世不竭"。

misaka現在有 n 個呱太玩偶放在一堆,每一次操作,misaka會選擇當前個數 > 1 的一堆呱太玩偶。並將這一堆呱太玩偶分成

輸入描述:

第一行兩個數 n, m 。

接下來一行 m 個數 ai 。

輸出描述:

輸出共乙個字串

輸入

4 1

5

輸出

ham
備註:

1 ≤ n ≤ 10^18, 1 ≤ m ≤ 10^5, 1 ≤ ai ≤ 10^18。

題意:給定n個物品,每次可以將物品分成數量為

題解:每次都能分成兩堆,用佇列模擬分堆,講可能出現的情況標記一下,最後與所給序列對比,如果完全一樣則輸出misaka否則輸出ham

最後還需要特判一下 所給序列的和不超過n (本以為這個和會爆ll,然而並沒有)

這個題剛開是沒想法,一直以為是找規律,主要是看到資料很大,但是沒想到他可以用佇列模擬每次一半,可以優化到log級別

另乙個坑就是容易爆記憶體,剛開始的bfs想法是

先把所出現的數都先標記一下,然後與bfs模擬出來的結果相比較,如果相同就cnt++,最後看看cnt是否等於m

然而這種想法,占用記憶體太大,,,,

總之一句話,太菜。。

#includeusing namespace std;

typedef long long ll;

#define linf 0x3f3f3f3f3f3f3f3f

ll a[100005];

mapvis;

ll cnt;

ll bfs(ll x)

return 0;

}int main()

if(sum!=n)

bfs(n);

int flag=1;

for(int i=1; i<=m; i++)

}if(flag)printf("misaka\n");

else printf("ham\n");

return 0;

}

11 22A 御阪美琴 優先佇列模擬

misaka是呱太爺爺的小粉絲,呱太爺爺有一句話說的好 一尺之棰,日取其半,萬世不竭 misaka現在有 n 個呱太玩偶放在一堆,每一次操作,misaka會選擇當前個數 1 的一堆呱太玩偶。並將這一堆呱太玩偶分成 第一行兩個數 n,m 接下來一行 m 個數 ai 輸出共乙個字串 表示 misaka ...