首页 > 其他分享 >[Codeforces] CF1747C Swap Game

[Codeforces] CF1747C Swap Game

时间:2023-11-26 16:57:58浏览次数:37  
标签:10 CF1747C 样例 Codeforces Alice leq Game 序列 Bob

游戏(game.cpp)—CF1747C—1200

\(时间:1s \space |\space 空间:250MB\)

题面翻译

Alice 和 Bob 两个人在玩游戏。

有一个长度为 \(n\) 的序列 \(a\),Alice 和 Bob 两人轮流完成一个操作,Alice 先开始。

每个人可以将数列的第一个数减 \(1\),并将它与后面序列的一个数进行交换,如果一个人操作之前发现当前序列中的第一个数为 \(0\),这个人就输了。

问如果两人都足够聪明,最后谁会赢?

输入格式

本题多测。 第一行包含一个整数 $ t $ $ (1 \leq t \leq 2 \cdot 10^4) $ — 测试数据数量

对于每组数据,第一行包含一个整数 $ n $ $ (2 \leq n \leq 10^5) $ — 表示\(a\)的长度

第二行包含\(n\)个整数 $ a_1,a_2 \ldots a_n $ $ (1 \leq a_i \leq 10^9) $

题目保证所给出的\(n\)之和不超过$ 2 \cdot 10^5 $ .

输出格式

对于每一个测试点,输出获胜玩家姓名,例如"Alice"或"Bob"

对于输出姓名的大小写不做强制要求

样例 #1

样例输入 #1

3
2
1 1
2
2 1
3
5 4 4

样例输出 #1

Bob
Alice
Alice

提示

对于第一个样例,Alice只能选择 $ i = 2 $ , 将序列变为 $ [1, 0] $ . 随后Bob也选择 $ i = 2 $ 并将序列变为 $ [0, 0] $ . 这时, $ a_1 = 0 $ , Alice 输掉了比赛

对于第二个样例,Alice只能选择 $ i = 2 $ . 接着序列的变化如下: $ [2, 1] \to [1, 1] \to [1, 0] \to [0, 0] $ .最终,Bob输掉了比赛

对于第三个样例,可以证明,Alice存在必胜策略

题解

思路

可以发现,每一次,小A只要将序列中的最小值挪到首位,下一轮小B就要把另外一个最大值挪到首位,小A就又可以重复挪动最小值的操作了

所以,只要进入了上述循环,小A必胜,否则小A必败

那么,我们只需要判断是否会进入循环,也就是\(a_1\)是不是\(a\)中的严格最小值(即\(\forall i \in [2,n],满足a_1<a_i\))即可

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int Maxn=1e5+10;
int n,x,a,flag;
void run()
{
	cin>>n>>x;flag=0;
	for(int i=1;i<n;i++)
	{
		cin>>a;
		if(a<x) flag=1;
	}
	cout<<(flag?"Alice":"Bob")<<endl;
	return;
}
signed main()
{
	int t;
	cin>>t;
	while(t--) run();
 } 

标签:10,CF1747C,样例,Codeforces,Alice,leq,Game,序列,Bob
From: https://www.cnblogs.com/lyk2010/p/17857485.html

相关文章

  • Educational Codeforces Round 158 (Rated for Div. 2)
    EducationalCodeforcesRound158(RatedforDiv.2)基本情况A题很水,几分钟秒了。B题想到一个解,被自己hack掉之后没有重新想,一直想在自己一开始的基础上改好,结果最后B都没拿下。B.ChipandRibbon我的思路其实也是找规律,根本没严谨地证明正确性。不应该一条路走到黑的......
  • Educational Codeforces Round 158 补题(A~D)
    A.思路找出最大耗油的路程即可ac代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;consti64inf=8e18;typedefpair<int,int>pii;voidsolve(){intn,x;cin>>n>>x;std::vector<int>v(n);f......
  • Educational Codeforces Round 158 (Rated for Div. 2)
    A.LineTrip题意是:有n个加油点,人要来回两趟,问你最少要多少油?usingnamespacestd;inta[100];voidsolve(){ intn,m; cin>>n>>m; for(inti=1;i<=n;i++)cin>>a[i]; intans=a[1]; for(inti=2;i<=n;i++){ ans=max(ans,a[i]-a[i-1]); } ans=max(ans,2*(m-......
  • Educational Codeforces Round 146 补题(A~C)
    EducationalCodeforcesRound146(RatedforDiv.2)A.Coins题目大意给你两个整数n和k,问你是否存在两个非负整数x和y,使得2⋅x+k⋅y=n成立思路裴蜀定理秒了,记得开longlongac代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;consti64in......
  • Educational Codeforces Round 158 (Rated for Div. 2) A-C
    A大致题意:有一条长度为x的直线公路,最开始你位于0号点并且此时你的油箱装满了油,公路有n个加油站,当你经过加油站的时候你可以在加油站加满油,每走一个单位需要花费1升油量,起始位置和终点没有加油站,请问你的油箱容量至少为多少升才可以够你跑一个来回。解题思路:我们的路径大致是......
  • [Codeforces] CF1717C Madoka and Formal Statement
    时间限制\(1s\)|空间限制\(250M\)题目大意题目描述给定一个数列\(a_{1…n}\),如果满足下面条件,你可以使\(a_i=a_i+1\):\(i<n\)且\(a_i\leqa_{i+1}\)\(i=n\)且\(a_i\leqa_{1}\)再给定一个数列\(b_{1…n}\),问\(a\)是否可以通过上述操作变......
  • [Codeforces] CF1703F Yet Another Problem About Pairs Satisfying an Inequality
    时间限制\(2s\)|空间限制\(250M\)题目描述给你一个序列$a_1,a_2,\dotsa_n$。请计算出满足下面条件的$(i,j)(1\leqi,j\leqn)$个数。$a_i<i<a_j<j$.输入格式第一行包含一个整数$t$($1\leqt\leq1000$)—测试数据的个数每一个......
  • [Codeforces] CF1857D Strong Vertices
    StrongVertices-洛谷题解是个好东西题意给定两个数组 \(a\) 和 \(b\),对此构造一张有向图:若 \(a_u−a_v≥b_u−b_v\),则 \(u\) 向 \(v\) 连边。求所有向其他所有顶点连边的顶点个数,并按从小到大顺序输出它们。思路先对原式进行转换:\(a_u-b_u\geqa_v-b_v\)接着......
  • [Codeforces] CF1714E Add Modulo 10
    题目传送门代码一遍AC真的很爽,样例都是一遍过题意每个测试点含多组测试数据。对于每组测试数据第1行一个整数\(n\),表示该数据个数第2行\(n\)个整数,你需要判断是否符合题意的数据对每组数据,你可以对其作若干次(可以为零)如下操作:选取数据中的一个数\(a_i\)将其替换......
  • [Codeforces] CF1719C Fighting Tournament
    题目传送门另:多测不清空,WA两行泪题意Burenka正准备去观看一年中最有趣的体育活动——她朋友Tonya组织的格斗锦标赛。有n名运动员参加了大赛,标号分别为为1,2,...,n。第i名运动员的实力是\(a_i(1\lea_i\len)\)。每个运动员的实力是不同的,也就是说,数组a是n的一种......