首页 > 其他分享 >cf:Removals Game(博弈论模拟),Black Circles(距离)

cf:Removals Game(博弈论模拟),Black Circles(距离)

时间:2024-08-17 19:57:20浏览次数:6  
标签:Circles ... Removals map int scanf cf 爱丽丝 数组

Removals Game

题目

爱丽丝得到了[1,2,...,n]的置换al,a2,...,a,鲍勃得到了[1,2...,n],的另一个置换b1,b2,...
在每个转折中,下列事件按顺序发生:
爱丽丝选择数组中的第一个或最后一个元素,并从数组中移除它;
鲍勃选择数组中的第一个或最后一个元素,并将它从数组中移除。游戏继续n-1轮,之后两个数组都将有一个完全剩余的元素:a数组中的x,b数组中的y。如果x=y,鲍勃赢,否则,爱丽丝赢。如果两个队员都发挥最佳,找出哪一个队员会赢

输入


每个测试包含多个测试用例,第一行包含测试用例数t (1<1<104),测试用例的描述如下。
每个测试用例的第一行包含一个单整数n (1<n<3·105)。下一行包含n个整数al,a2,··,an (1<ai<n,所有a!都是不同的) -Alice的排列。下一行包含n个整数b1,b2,...,bn (1bi<n,所有b&都是不同的)--Bob的置换保证所有n的总和不超过3·105。

输出


对于每个测试案例,打印单行与获胜者的名字,假设两个队员发挥最佳。如果爱丽丝获胜,打印爱丽丝,否则,打印鲍勃。

做法

赛时找不到规律,直接模拟了。A要想赢的话,就得拿掉B还有的值,因为A不想和B一样。B要想赢的话,就要拿掉A没有的值,因为B想和A一样。A先拿的话,他要选择下一步B拿不到的值。然后模拟就行。

#include<bits/stdc++.h>
using namespace std;
int t,n;
int main(){

	scanf("%d",&t);

	while(t--){

		scanf("%d",&n);
		vector<int> a(n),b(n);

		unordered_map<int,int> mpa,mpb;//不能用map,会超时

		for(int i=0;i<n;i++) scanf("%d",&a[i]),mpa[a[i]]++;
		for(int i=0;i<n;i++) scanf("%d",&b[i]),mpb[b[i]]++;
		
		if(n<=2){
			cout<<"Bob"<<endl;
			continue;
		}
		
		int al=0,ar=n-1,bl=0,br=n-1;
		
		for(int i=0;i<n-1;i++){
			
			if(i==0){//A先要选下一步B拿不到的值
				
				if(a[0]!=b[0]&&a[0]!=b[n-1]) {
					mpa[a[0]]--;
					al++;
				}
				
				else if(a[n-1]!=b[0]&&a[n-1]!=b[n-1]){
					mpa[a[n-1]]--;
					ar--;
				}

				else{//没有下一步B拿不到的值
					mpa[a[0]]--;
					al++;
				}

			}
			
			else{
			
				
				if(mpb[a[al]]){
					mpa[a[al]]--;
					al++;
				}

				else if(mpb[a[ar]]){
					mpa[a[ar]]--;
					ar--;
				}

				else{
					mpa[a[al]]--;
					al++;
				}
				
			}
			
			
			if(mpa[b[bl]]==0){
				mpb[b[bl]]--;
				bl++;
			}

			else if(mpa[b[br]]==0){
				mpb[b[br]]--;
				br--;
			}

			else{
				mpb[b[bl]]--;
				bl++;
			}
			
		}
		
		if(b[bl]==a[al]) cout<<"Bob"<<endl;
		else cout<<"Alice"<<endl;
		
	}
}

wa的原因

我起初使用了erase来模拟数字被拿掉的过程,后来超时了,就改为al,ar,bl,br模拟了。然后用map也会超时,要用unordered_map

Black Circles

题目

二维平面上有n个圆,第i个圆的中心为 (xi,y;),初始时,所有圆的半径都是0。
圆的半径以每秒1单位的速度增加。
你现在位于(x,y),你的目标是到达(x,y而不碰到任何园的园周(包括到达(X,;的那一刻)。你可以朝任方向移动。但是,你的速度限制在每秒1个单位。
请确定这是否可能。

做法

这题就是算距离。然后比较。

#include<bits/stdc++.h>
using namespace std;
int t,n,m,k;
long long x[100010],y[100010];
long long sx,sy,tx,ty;
const double eps=1e-10;
int main(){

	scanf("%d",&t);

	while(t--){

		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			scanf("%lld%lld",&x[i],&y[i]);
		}
		scanf("%lld%lld%lld%lld",&sx,&sy,&tx,&ty);
		
		long long dis=(sx-tx)*(sx-tx)+(sy-ty)*(sy-ty);

		int sign=0;
		for(int i=1;i<=n;i++){

			long long dis2=(x[i]-tx)*(x[i]-tx)+(y[i]-ty)*(y[i]-ty); 

			if(dis2-dis<=0) {
				sign=1;
				break;
			}

		}

		if(sign) cout<<"No"<<endl;
		else cout<<"Yes"<<endl;
		
	}
}

wa的原因

我赛时算距离用double了,然后没有去掉开方,然后精度问题不会处理……

标签:Circles,...,Removals,map,int,scanf,cf,爱丽丝,数组
From: https://blog.csdn.net/2301_80718054/article/details/141127317

相关文章

  • cf966:E. Photoshoot for Gorillas(一个格子被多少个方格包裹了)
    题目你非常喜欢大猩猩,于是决定为它们组织一次拍摄活动。大猩猩生活在丛林中,丛林被表示为一个有......
  • CF Round 966 Div3
    A给定一个字符串,判断是不是大于等于10210^2102的形式,例如......
  • CF 做题笔记
    CF1926GVladandTroubleatMIT\(\texttt{*1900}\)。TAG:\(\texttt{树形dp}\)\(dp_{i,S,P}\)为\(i\)的子树内是否存在S和P的状态。转移方程为:当\(s_i\)为C时dp[x][0][0]+=min({dp[v][1][0]+1,dp[v][0][1]+1,dp[v][0][0]});dp[x][1][0]+=min(......
  • CF704E Iron Man 题解
    Description“铁人”yyb在玩游戏。在一个\(n\)个点的树上,yyb放置了\(m\)个鸡贼。每个鸡贼有四个整数参数\(t_i,c_i,v_i,u_i\),表示这个鸡贼会在\(t_i\)时刻出现在点\(v_i\),并以每时刻\(c_i\)条边的速度向\(u_i\)点匀速移动,到达\(u_i\)点时立刻消失。如果一个时刻......
  • CF1503E 2-Coloring
    CF1503E2-Coloringcjx组合强。思路观察一下题目,不难发现只有当黄色形成如下的单峰时才合法。(染错色了,将就一下)其中两座峰的峰顶高度相加等于\(m\),为了方便统计,我们钦定右边的峰一定在左峰下方的行出现,最后答案乘以二就是最终方案。发现对于每一边是两个最长不下降子序列......
  • 自创CodeForcesHelperv1.0,解决CF太卡和跳题问题,代码持续更新!
    文章目录前言一、方法二、源代码三、使用方法四、效果展示总结前言对于OIers来说,Codeforces是一个很好的外国OJ。洛谷上确实收录了大部分CF的题,但是最近由于Codeforces的cloudflare加强了,所以洛谷的爬虫已经无法正确爬取提交记录的数据了,详见link。我......
  • 「杂题乱刷2」CF1183E & CF1183H
    vp到的。题目链接CF1183ESubsequences(eazyversion)CF1183HSubsequences(hardversion)解题思路考虑动态规划。设\(dp_{i,j}\)表示考虑到字符串前\(i\)个字符中选取的字符长度为\(j\)的不同的子序列数量。于是我们就有以下转移:\(dp_{i,j}=dp_{i-1,j}+dp_{......
  • CF1503E 2-Coloring
    CF1503E2-Coloring题目大意略过。做法解析不会组合,使用了DP,但其实本质相同。我们假设所有的格子都是蓝色的,然后考虑将一些格子换成黄色的。我们考虑从每一行的两头开始将格子换成黄色,只要不把整一行都换成黄色的我们就可以保证每一行恰好有一段蓝色的格子。为了保证每一......
  • D44 2-SAT+前缀优化+二分 CF587D Duff in Mafia
    视频链接: CF587DDuffinMafia-洛谷|计算机科学教育新生态(luogu.com.cn)#include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=500005;inthead[N],idx,ne[N*6],to[N*6];voidadd(intx,......
  • CF1988D The Omnipotent Monster Killer
    luogu中文题面:https://www.luogu.com.cn/problem/CF1988D树形dp。我们只关心子树的根节点v什么时候被删去。dp[u][i]+=min(dp[v][1...i-1,i+1...T]).T是log(n)的。因为\(T\leqMex(u)\),而考虑要多少节点使\(Mex(u)=T\),有\(f_T=1+f_1+...f_{T-1}\)得\(T=log_2n\)不......