牛客練習賽76

2021-10-18 22:46:11 字數 2126 閱讀 4361

是乙個博弈遊戲

注意到(m+1)^n<=5000

那麼我們是可以直接考慮爆搜的

總共n個回合,那麼兩個人就是2*n次操作

定義f[a][b]代表當 ,zzugzx 選了a的數,kurisu選了b的數,zzugzx贏的概率

a和b分別是n位m+1進製的數,代表n回合他抽到1-m的數放在1~n哪個位置

#include

using

namespace std;

int ok[

5000][

5000];

double f[

5000][

5000];

int n,m;

double

dfs(

int t,

int a,

int b)

f[a]

[b]+

=maxx/m*

1.0;

//從最大處轉移}}

else

f[a]

[b]+

=minn/m*

1.0;

//從最小處轉移}}

return f[a]

[b];

}int

main()

思路:

先求出線性基

通過貪心或者二分求出有多少個值通過線性基計算小於等於k

通過所有情況減去小於等於的情況,即為答案

注意:需要判斷0的情況,線性基無法特判0

貪心:`

#include

using

namespace std;

typedef

long

long ll;

ll n,k;

ll f=0;

ll p[

100]

;ll cnt[

100]

;ll tot;

void

add(ll x)

else}}

f=1;

}voidrb(

)}}for

(ll i=

0;i<=

62;i++)if

(p[i]

) cnt[tot++

]=p[i];}

ll ask

(ll k)}if

(f) ct++

;return ct;

}int

main()

rb();

cout<<

(1ll

<+f-1ll

-ask

(k)

}

二分

#include

using

namespace std;

typedef

long

long ll;

ll n,m,tot =0;

long

long u;

long

long a[

1000005];

long

long k[61]

,tt,x,cnt;

bool flag =0;

void

insert

(long

long x)}}

flag=1;

}long

long

ask(

long

long x)

}return ans;

}int

main()

for(ll i =

0;i <=

60;i++)if

(k[i]

) cnt++;}

ll l=

1,r =

(1ll

<<

(tot))-

1+flag;

ll sum=1;

while

(l<=r)

else

}ll ans=1;

cout<<

(1ll

<+flag-sum

}

牛客練習賽76題解 A,C

思路 爆搜,列舉物件 乙個小組內所有人對遊戲的了解程度之和。之後判斷每個方案,在可行前提下的組數,取min即可 注 在m m 1 m m 1 m m 1 處除以2也可以,就不用逆元了 include include include include include include include in...

牛客題集 練習賽76

前段時間發現牛客這些比賽質量挺高的,打算寒假期間補一補 a直接列舉每個小組對遊戲的了解程度,然後每個人從前到後連著組隊,如果當前隊伍了解程度剛好等於列舉的了解值,說明能夠組成一隊,後面的人再自行一一組隊,否則,當前列舉值不符合條件。include define debug freopen r.txt...

牛客練習賽76 A 校園活動

題目鏈結 牛牛中學為了給本校的oier放鬆心情,決定舉報一場校園活動。現在學校的共有 個oier,學校想把他們分為一些小組進行乙個團隊遊戲。學校先了解了一下每個同學對這個團隊遊戲的了解程度。為了遊戲的公平,學校需要使分組後的每乙個小組內所有人對遊戲的了解程度之和相等,但同學們並不希望完全由學校來給他...