首页 > 其他分享 >Codeforces Round #832 (Div. 2) C. Swap Game (博弈论)

Codeforces Round #832 (Div. 2) C. Swap Game (博弈论)

时间:2022-11-05 16:02:00浏览次数:87  
标签:832 minn min 必败 LL Codeforces 必胜 Game

https://codeforces.com/contest/1747/problem/C
C. Swap Game

题目大意:

给定一个长度为n的数组a,每次只要当我想动但是发现a[1]==0的时候我就输了

要么就是我每次把a[1]的数值减一丢到后面的数组中去,同时从后面的数组中提出一个数字来放回到a[1]中。

alice先手,问我们谁能赢。
input 
3
2
1 1
2
2 1
3
5 4 4
output 
Bob
Alice
Alice

佬儿教学时间到了

可以证明必胜态是最小的元素(简称min)不是a[1],必败态是a[1] = min
首先考虑边界情况
a[1]=0的时候,0肯定是min,所以必败
然后比如0在后面,a[1]>0,那么可以把a[1]和这个0 交换,就必胜
然后一个人在必胜态时,只需把a[1]-- ,把min换到a1。这之后min还是最小的,跑到了a[1],就把必败态给对面了
同理,一个人在必败态,无论怎么操作,a[1]跑到后面还是最小的,就把必胜态给对面了
从边界情况往上推:
比如0在后面就必胜
然后推出 没有0的情况下 1在前面 就必败 等等

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=5000200,M=2002;
LL a[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    cin>>T;
    while(T--)
    {
        LL n;
        cin>>n;
        LL minn=1e9;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            minn=min(minn,a[i]);
        }
        if(a[1]==minn) cout<<"Bob"<<endl;
        else cout<<"Alice"<<endl;
    }
    return 0;
}

标签:832,minn,min,必败,LL,Codeforces,必胜,Game
From: https://www.cnblogs.com/Vivian-0918/p/16860354.html

相关文章

  • 「题解」Codeforces 1612F Armor and Weapons
    首先可以不管套件,假定\(n<m\),那么答案不超过\(\mathcal{O}(\logn+\frac{m}{n})\),也就是先倍增把\(n\)造出来,然后一步步造\(m\).答案这么小,那么常见的套路就是把答案......
  • Codeforces Round #832 (Div2)
    A.TwoGruops将正负数分离为两个集合,得到\(sum_{+},sum_{-}\)。考虑将一个数移到正负性相反的集合中,一定会导致\(sum_{+},sum_{-}\)同时在数轴上向原点移动,差值绝对......
  • Codeforces Round #832 (Div. 2) E
    牛逼题。通过拐点刻画路径,这样每条路径的贡献方式唯一,你只要钦定拐点都选即可刻画唯一的路径,然后路径上的其他点随便选。https://codeforc.es/contest/1747/problem/Eht......
  • Codeforces Round #751 (Div. 2) D
    D.FrogTraveler考虑dpdp[i]表示i高度的时候最少多少步能达到然后再bfs就可以了但是这样是n2的虽然看起来只有n个点我们考虑优化我们主要复杂度是当前点还会去搜......
  • Codeforces Round #832 (Div. 2) A-D
    比赛链接A题解知识点:贪心。我们考虑把正数和负数分开放,显然把负数和正数放在一起的结果不会更优。时间复杂度\(O(n)\)空间复杂度\(O(1)\)代码#include<bits/std......
  • Codeforces Round #832 (Div. 2)
    A.TwoGroups数组和的绝对值即为答案。B.BANBAN大概就是尽可能把前面的B搞到后面,尽可能把后面的N搞到前面。答案为\(\lceil\frac{n}{2}\rceil\),操作为每次......
  • Google Game Service 接入指南
    前言应用接入Game登录,接入过程中遇到各种卡流程的问题,首次接入Gamev2,发现Gamev2版本的调用时机无法自行控制,并且不能退出当前登录的账户。而旧版gamev1的api提供了退......
  • Codeforces Round #764 (Div. 3) G
    G.MinOrTree看到或运算我们思考如何按位来做我们可以贪心的从高位到低位的要是该位可以都用0的来构成一颗生成树我们显然是很高兴的但是怎么check?我们每次遍历一......
  • CodeForces - 914C Travelling Salesman and Special Numbers
    题意:给出一个二进制数a,每次操作将当前数变成其二进制下1的个数,若干次操作后可以将其变为1.给定k,求不大于a的数中,经过k次操作能变成1的数的数量。解:观察一下这个操作,可以求......
  • Codeforces Round #776 (Div. 3) E
    E.ReschedulingtheExam显然我们能想到的每次操作都是先将最小的取出来操作要是我们有两个数都是最小的我们只有相邻的时候才能操作要是大于两个那我们就不管怎么操......