zoukankan      html  css  js  c++  java
  • 【题解】 洛谷 P2649 游戏预言

    题目:

    P2649 游戏预言

    题意:

    John和他的好朋友们在van纸牌游戏。共有(m)个人。纸牌有(n imes m)张,从(1……n imes m)编号。每人有(n)张。每人一回合出一张牌,编号最大的获胜。由于输了有蜜汁惩罚,John想尽可能地多赢。(欲知后事如何,且听下回分解。。。

    思路:

    题目问的是John最少赢多少次。我们可以设想:John十分美味多汁。他的好朋友们都想让他接受蜜汁惩罚所以合伙坑John。这样我们可以将不是John的牌放到一堆。每当John出一张牌就先出一张比该牌大的且不是John的的牌。然后剩余的(m-2)张牌就从小的挨着出。直到出够(m-2)张。如果没有比John的牌大的John必赢

    (Code)

    #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<<'
    ';
    	return 0;
    }
    

    月考rp++

  • 相关阅读:
    201621123058《java程序设计》第八周学习总结
    201621123058《java程序设计》第七周学习总结
    201621123058《java程序设计》第六周学习总结
    201621123058《java程序设计》第五周学习总结
    关于HTK工具下载安装的问题
    load 和 loads的区别
    flask 数据库操作
    flask 计数器
    flask form表单
    flask 宏,继承和包含
  • 原文地址:https://www.cnblogs.com/poi-bolg-poi/p/11629850.html
Copyright © 2011-2022 走看看