洛谷P2649 游戏预言(思维 )

编程入门 行业动态 更新时间:2024-10-11 19:25:38

洛谷P2649 游戏预言(<a href=https://www.elefans.com/category/jswz/34/1770010.html style=思维 )"/>

洛谷P2649 游戏预言(思维 )

原题链接

其实这题我是过了才去想我算法的可行性的(过的一脸懵逼)
我把所有牌分为两部分,一部分是john(a[])的一部分是对手的(b[])
然后两个sort 从后往前遍历 看是否john必胜必胜的条件:对手最大牌也不能来压john的牌
可能输的条件:对手最大牌用于压john此牌,当然我们会想到一些细节问题,就是每轮对手出
m张牌而john只出1张,怎么能一对一的实现呢?
简单证明如下:
其实对手牌有n*(m-1)张,我们从后往前如果选择了最大一张来压john则再选择m-1张最小的来出
最后这很多的m-1张是不会被遍历到的

#include <iostream>
#include <cstring>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <cstdio>
#include <stdio.h>
#include<queue>
#include<math.h>
#include<stack>
#include<set>
#include<map>
using namespace std;
#define ll long long
inline ll read()
{ll k = 0, f = 1; char ch = getchar();while (ch < '0' || ch>'9'){if (ch == '-')f = -1;ch = getchar();}while (ch >= '0' && ch <= '9'){k = k * 10 + ch - '0';ch = getchar();}return k * f;
}ll a[1005];
ll vis[1005];
ll b[1005];
int main()
{ll m=read(),n=read();for(int i=0;i<n;i++){a[i]=read();vis[a[i]]=1;}sort(a,a+n);ll num=0;for(int i=1;i<=n*m;i++){if(!vis[i]){b[num++]=i;}}sort(b,b+num);ll p=n-1;ll d=num-1;ll ans=0;while(d>=0&&p>=0){if(a[p]>b[d]){ans++;p--;}else d--,p--;}cout<<ans<<'\n';
}

更多推荐

洛谷P2649 游戏预言(思维 )

本文发布于:2024-02-06 03:49:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746256.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:思维   游戏   洛谷

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!