Codeforces Round 897 (Div. 2)

Codeforces Round 897 (Div. 2)

比赛链接

A. green_gold_dog, array and permutation

题目
给你一个长度为n的数组a,要求你找出一个数组长度为n的数组b,大小是1-n,保证每个数字出现一次,使得a数组与b数组对应位置上的差值和最大。

A思路:

记录a数组每个数的坐标,给a数组排个序即可。

A代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4e4+10;

struct node
{
	int x,idx;

}a[N];
bool cmp(node a,node b){
	if(a.x==b.x){
		return a.idx<b.idx;
	}
	return a.x>b.x;
}
// int b[N];
int c[N];

void solve(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].x;
		a[i].idx=i;
	}
	sort(a+1,a+n+1,cmp);
	int x1=1;

	for(int i=1;i<=n;i++){
		c[a[i].idx]=x1++;
	}
	for(int i=1;i<=n;i++){
		cout<<c[i]<<" ";
	}
	cout<<endl;
	return ;
	
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

B. XOR Palindromes

题目链接
这题没有读懂什么意思!!!!还望有大佬能帮我解释解释。

C. Salyg1n and the MEX Game

题目链接
给定一个数组,两个人都可以对这个数组进行操作,一个人可以在数组中插入数组中没有的元素,一个可以在数组删除一个元素,但是删除的元素必须严格小于插入数组中的元素,有一个mex函数的定义是数组种未出现的最小自然数,插入的保证mex得到的最大,删除的保证得到的mex最小,要求让插入的人获胜

C思路:

这是一个比较简单的交互题,我们如何让插入的人获胜呢?要想保证最大,我们可以输入原来数组的mex值,之后只要对方删除哪个元素我们再添上哪个元素就可以了。

C代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll a[N];

void solve(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];

	}
	sort(a+1,a+n+1);
	ll x=0;
	if(a[1]!=0){
		cout<<0<<endl<<endl;
		cin>>x;
	}
	else{
		ll pos=n;
		for(int i=1;i<n;i++){
			if(a[i]+1!=a[i+1]){
				pos=i;
				break;
			}
		}
		cout<<a[pos]+1<<endl<<endl;
		cin>>x;
		while(x!=-1){
			cout<<x<<endl<<endl;
			cin>>x;
		}
	}
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}
posted @ 2023-09-12 19:37  du463  阅读(40)  评论(0编辑  收藏  举报