模擬8 23 one遞推,約瑟夫

2022-05-06 22:42:09 字數 1514 閱讀 1651

前置芝士約瑟夫問題

這樣大概就是板子問題了

考場的樹狀陣列+二分的60分暴力???

1 #include2

#define int long long

3#define maxn 11000001

4int

c[maxn];

5int lowbit(int x)intn;6

void add(int x,intk)7

12}13int query(int

x)14

19int second_divied(int l,int r,int x,int

last_rs)

2029

else r=mid;

30//

printf("l=%lld r=%lld\n",l,r);31}

32if(query(l)-last_rs==x)return

l;33

else

return

r;34}35

int find(int

pos)

3641

return

pos;

42 }int ans=0;43

void

work2()

4457

else

if(now_rs-last_rs

5867 cir++;sum++;68}

69 ans=second_divied(1,n,1,0

);70 add(ans,-1

);71}72

int t=0;73

signed main()

7483 }

view code

對於約瑟夫問題

我們可以知道最後的人一定是公升到最後的,他在新的隊伍裡的編號是零(因為只有乙個人,從零開始編號)

然後我們從後往前遞推,考慮最後勝利者在上一層的編號直到最後編號

我們假設當前層為4,編號為3

那麼在上一層時因為乾掉了乙個人,那麼就從乾掉的人的後乙個開始編號

所以上一層是在位置6

這樣我們得到f[i]表示在第i次操作後勝利者所處的編號

然後就簡單了

#include#define maxn 10000001

using

namespace

std;

int t;int n;int ans=0

;signed main()

printf(

"%d\n

",ans+1

); }

}

模擬8 23 陰陽 DP

對於此題的性質我們考慮dp 分四種情況 黑色塊在右側單調降,單調公升 還有在左側 另外我們這樣可能會記重,所以還要將重複記過的也就是邊界線是橫的和豎的 然後還要將全白全黑加上 1 include2 define maxn 2100 3 define int long long 4using name...

校內模擬 拯救(遞推)

這題年代可久遠了。似乎是今年寒假還是什麼時候loli的測試題來著?反正atp當時太水了不會做。現在越看越覺得當時很蛋疼 不過看這個題目的話,首先它的目標狀態是把所有的都變成0,所以會有乙個f i 表示把前i個都變成0所需要的最少步數 其次,它要改變第i個點的狀態一定是把前i 2個變成0並且把第i 1...

遞推(DP) noip 模擬 不等數列

將 1到 n任意排列,然後在排列的每兩個數之間根據他們的大小關係插入 和 第一行 2 個整數 n,k。乙個整數表示答案。5 266對於 30 的資料 n 10 對於 100 的資料 k n 1000 顯然這絕對不是一道暴力題。很容易就能想到,從1到n將數字乙個個新增進去,同時每新增乙個數字,要麼多乙...