P2649 遊戲預言ios
John
和他的好朋基友們在van紙牌遊戲。共有$m$我的。紙牌有$n \times m$張,從$1……n \times m$編號。每人有$n$張。每人一回合出一張牌,編號最大的獲勝。因爲輸了有蜜汁懲罰,John
想盡量地多贏。(欲知後事如何,且聽下回分解。。。code
題目問的是John
最少贏多少次。咱們能夠設想:John
十分美味多汁。他的好朋基友們都想讓他接受蜜汁懲罰因此合夥坑John
。這樣咱們能夠將不是John
的牌放到一堆。每當John
出一張牌就先出一張比該牌大的且不是John
的的牌。而後剩餘的$m-2$張牌就從小的挨着出。直到出夠$m-2$張。若是沒有比John
的牌大的John
必贏遊戲
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<algorithm> #define rr register int ans,n,m,sum,jcard[51]; bool vis[1010],used[1010]; inline void read(int &T) { int x=0;bool f=0;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} T=f?-x:x; } int main() { read(m),read(n); for(rr int i=1,a;i<=n;++i) { read(a); vis[a]=1; jcard[++sum]=a; } for(rr int i=1;i<=sum;++i) { int num=m-1; int x=jcard[i]; used[x]=1; for(rr int j=x+1;j<=n*m;++j) { if(!used[j]&&!vis[j]) { num--; used[j]=1; break; } } if(num==m-1) ans++; for(int j=1;num>0;++j) { if(!used[j]&&!vis[j]) { num--; used[j]=1; } } } std::cout<<ans<<'\n'; return 0; }
月考rp++get