原題鏈結
其實這題我是過了才去想我演算法的可行性的(過的一臉懵逼)
我把所有牌分為兩部分,一部分是john(a)的一部分是對手的(b)
然後兩個sort 從後往前遍歷 看是否john必勝必勝的條件:對手最大牌也不能來壓john的牌
可能輸的條件:對手最大牌用於壓john此牌,當然我們會想到一些細節問題,就是每輪對手出
m張牌而john只出1張,怎麼能一對一的實現呢?
簡單證明如下:
其實對手牌有n*(m-1)張,我們從後往前如果選擇了最大一張來壓john則再選擇m-1張最小的來出
最後這很多的m-1張是不會被遍歷到的
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define ll long long
inline ll read()
while
(ch >=
'0'&& ch <=
'9')
return k * f;
}ll a[
1005];
ll vis[
1005];
ll b[
1005];
intmain()
sort
(a,a+n)
; ll num=0;
for(
int i=
1;i<=n*m;i++)}
sort
(b,b+num)
; ll p=n-1;
ll d=num-1;
ll ans=0;
while
(d>=
0&&p>=0)
else d--
,p--;}
cout<'\n'
;}
洛谷P4161 遊戲
給出 n 令 nxt x 表示 x 對應的數字。一開始有乙個 1 sim n 的遞增排列,每次數字 x 會變成 nxt x 如此反覆直到該序列再次變回 1 sim n 的遞增排列。設迴圈了 k 次,你需要求出在 nxt 各不相同的情況下,k 有多少種取值。也就是說 nxt 有 n 種方案,對於每一種...
洛谷 p2241 統計方形(思維)
求乙個n m的棋盤格上有多少個不同的正方形,多少個不同的長方形。用兩個for來模擬矩形的兩個邊,看這個矩形能在該棋盤格上擺出多少個不同的位置即可,如果矩形邊長相同則結果加到正方形上,反之則加到長方形上。include using namespace std define int long long ...
洛谷 P1057 傳球遊戲
題目描述 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出...