首页 > 编程语言 >[题解][2022江西省程序设计大赛] A Game of Taking Numbers

[题解][2022江西省程序设计大赛] A Game of Taking Numbers

时间:2024-04-11 20:23:13浏览次数:20  
标签:数字 rqdmap int 题解 Taking 女友 Game 三组

题目描述
rqdmap和他的小女友正在玩一个游戏。有n个正整数。这两个人轮流取数字。为了显示他的绅士风度,rqdmap要求他的小女友先取数字。

每当rqdmap的小女友可以选择剩下的数字中的任意一个来拿走(记为x),rqdmap需要从剩下的数字中选择一个数字(记为y),并且满足以下两个条件中的至少一个:

1.|x − y| ≤ 3,即x和y的绝对值之差不能超过3。
2.x ≡ y (mod 3),即x和y对3取模得到的余数相同。

如果rqdmap无法从剩下的数字中选择合格的数字,rqdmap的小女友赢;否则,rqdmap赢。rqdmap和他的小女友都很聪明。现在在游戏开始之前,您已经获得了这些数字,请判断最终谁会赢得游戏。

题解
考虑用将所有数字根据除三的余数分为三组:属于同一个组的所有数字可以连续拿走,不同属一个组的数字必须满足绝对值之差不超过3才可以拿走。

  1. 当三组含有的数字数量均为偶数:可知先手方不论如何取,后手方都可以取和先手方同一组的数字,三组的元素数量会始终保持为偶数。先手必败。
  2. 当三组含有的数字数量为奇,奇,偶:只要在两个奇数组中各取一个数,或在奇数,偶数组各取一个数,便可以回到情况1,先手必败的可能。因此只需要判断是否可满足此种情况。
  3. 其余情况:n为奇数或找不到先手必败点,则先手必胜。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		bool flag=false;
		int n;
		cin>>n;
		map<int,int>ma;
		vector<int> v[3];
		int cnt[3]={0,0,0};
		for(int i=1;i<=n;i++){
			int a;
			cin>>a;
			ma[a]++;
			v[a%3].push_back(a);
			cnt[a%3]++;
		}
		if(n%2){
			cout<<"His little girlfriend\n";
			continue;
		}
		else if(cnt[0]%2==0&&cnt[1]%2==0&&cnt[2]%2==0){
			cout<<"rqd\n";
			continue;
		}
		else{
			int x=0;
			while(cnt[x]%2)x++;
			int p=-1,q=-1;
			for(int i=0;i<v[x].size();i++){
				if(ma[v[x][i]+2]||ma[v[x][i]-1]){
					p=i;
					break;
				}
			}
			for(int i=0;i<v[x].size();i++){
				if(i==p)continue;
				if(ma[v[x][i]+1]||ma[v[x][i]-2]){
					q=i;
					break;
				}
			}
			if(p!=-1&&q!=-1)flag=true;
			x=(x+1)%3;
			for(int i=0;i<v[x].size();i++){
				if(ma[v[x][i]+1]||ma[v[x][i]-2]){
					flag=true;
					break;
				}
			}
			if(flag)cout<<"rqd\n";
			else cout<<"His little girlfriend\n";
		}
	}
} 

标签:数字,rqdmap,int,题解,Taking,女友,Game,三组
From: https://www.cnblogs.com/zwzww/p/18129970

相关文章

  • 文件下载时中文文件名乱码及链接失效问题解决
    问题:报错提示11-Apr-202415:38:43.792信息[Catalina-utility-2]org.apache.catalina.startup.HostConfig.deployDirectoryWeb应用程序目录[G:\开发工作用软件\Java开发用\apache-tomcat-10.1.7\webapps\manager]的部署已在[293]毫秒内完成11-Apr-202415:38:44.573信息......
  • 题解 P10314【[SHUPC 2024] 函数】
    注意到:\[f(x)=\lfloorx\rfloor,\qquad(x\notin\N)\]代码:intT;doublex;cout<<fixed<<setprecision(12);for(cin>>T;T;--T){cin>>x;cout<<floor(x)<<endl;}感觉说明不够过不了审,于是简单说一下正确性:由诱导公式\(\c......
  • [题解] [洛谷P1404] 平均数
    洛谷P1404平均数题目描述给一个长度为\(n\)的数列,我们需要找出该数列的一个子串,使得子串平均数最大化,并且子串长度\(\geqm\)。输入格式第一行两个整数\(n\)和\(m\)。接下来\(n\)行,每行一个整数\(a_i\),表示序列第\(i\)个数字。输出格式一个整数,表示最大平均数......
  • [题解] <NOIP2017> 时间复杂度
    [题解]NOIP2017时间复杂度题目描述小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序,于是你的机会来啦!下面请你编写程序来判断小明对他的每个程序给出的时间复杂度是否正......
  • CF617E XOR and Favorite Number 题解
    想了好久才明白zz来源?:莫队题单题目大意给定一个长度为\(n\)的序列\(a\),然后再给一个数字\(k\),再给出\(m\)组询问,每组询问给出一个区间,求这个区间里面有多少个子区间的异或值为\(k\)。\(1\len,m\le10^5\)\(0\lek,a_i\le10^6\)\(1\lel_i,r_i\len\)题......
  • 排序规则冲突问题解决
    --英文操作系统数据库恢复到中文版本操作系统的时候容易出现一下问题--无法解决equalto运算中"SQL_Latin1_General_CP1_CI_AS"和"Chinese_PRC_CI_AS"之间的排序规则冲突。--简单解决办法如下:指定排序规则COLLATESQL_Latin1_General_CP1_CI_AS或者Chinese_PRC_CI_AS......
  • 【题解】CF311E Biologist题解
    CF311EBiologist题解非常好的一道最小割。思路首先看到每一个位置又会有\(01\)两种情况,然后要满足一些要求,求最大收益,考虑类似于P4313文理分科和P1361小M的作物这种集合划分的建图方法,也就是要用最小割求解。由于我们要求的是最大收益,所以我们要先明确要最小化什么,......
  • 【题解】CF1187G Gang Up
    【题解】CF1187GGangUp题意给定一个图,有\(k\)个人要走到\(1\)号节点,问最小花费。解法一眼丁真,鉴定为费用流。考虑到这道题花费会与时间有关,所以分层图,启动!。按时刻分层,现在分析每个人在第\(k\)时刻的动向:1.呆着不动。2.走到下一个节点。对于动向\(1\),从时......
  • 洛谷 P6692 题解
    洛谷P6692出生点题意简述\(n\)行\(m\)列构成\(nm\)个格点,在其中指定\(k\)个障碍点。每行、每列之间的距离为\(1\),每次任意选取两个非障碍点,计算这两个点的曼哈顿距离,求所有选法的距离之和。分析由容斥原理,答案为「任意两点之间的距离之和」\(-\)「每个障碍点到其他......
  • CF358B Dima and Text Messages 题解
    大家好,我不喜欢string,所以我选择用char来写。题目传送门,但不是洛谷。吐槽一下,这个翻译翻译的并不好,翻译中并没有说明“爱心”是指<3,还是得去自己翻。正文将读入的单词连在一起,并穿插爱心,注意这里首尾都是爱心,需要手动补充。最后将得到的序列与输入的字符串进行比对即可。......