Codeforces Round 977

这场比赛是晚上vp的,太逆天了自己,给我自己都菜笑了,第二题当时差了一个那个循序渐进的点没想到,关键细节都想到了,当时以为是错的就没写,第二题没做出来确实好久没遇到过了,裂开

话不多说,直接开始看题目

A. Meaning Mean

这题不需要看了,很水的一道题,就从小到大排序,然后累加除2即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n;
int a[200005];
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	int ans=a[1];
	for(int i=2;i<=n;i++)
	{
		ans=(ans+a[i])/2;
	}
	cout<<ans<<"\n";
}
signed main()
{
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

 B. Maximize Mex

题意:就是说给你一个数组,然后每个元素都可以选择0次或者有限次的去累加值x,然后判断最小的没有出现的整数是多少

思路:用map去存储每个数出现的次数,但是我们知道有n个数,所以不会出现的最小数只会存在于0~n这个区间内,因此我们去遍历这个区间,去判断当前i这个地方是否存在值,如果不存在就判断能否通过累加获得,我们用另一个map容器去存储被x取模后的结果,也就是可以变换的数量,然后去判断是否到了一个结点此时既没有出现,也没有多余的数可以累加出来即可

#include<bits/stdc++.h>
using namespace std;
#define int long long

int t;
int n,x;
int a[200005];

void solve()
{
	cin>>n>>x;
	map<int,int> mp;
	map<int,int> num;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		mp[a[i]]++;
	}
	for(int i=0;i<=n;i++)
	{
		if(mp[i]>1)
		{
			num[i%x]+=mp[i]-1;
			mp[i]=1;
		}
		else if(mp[i]==0&&num[i%x]!=0)
		{
			mp[i]=1;
			num[i%x]--;
		}
		else if(mp[i]==0)
		{
			cout<<i<<"\n";
			return ;
		}
	}
}

signed main()
{
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

 C1. Adjust The Presentation (Easy Version)

 这题感觉没什么好说的,纸上写一写就发现,如果你想要满足那个b数组那个序列,你的初始序列就要去满足他那个顺序,我们遍历一遍去查看是否符合那个顺序即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m,q;
int a[200005];
int b[200005];
void solve()
{
	int vis[200005];
	memset(vis,0,sizeof(vis));
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int j=1;j<=m;j++)
	{
		cin>>b[j];
	}
	int len=1;
	for(int i=1;i<=m;i++)
	{
		if(vis[b[i]]!=0)
		{
			continue;
		}
		if(a[len]!=b[i])
		{
			cout<<"TIDAK\n";
			return ;
		}
		vis[b[i]]=1;
		len++;
	}
	cout<<"YA\n";
	return ;
}
signed main()
{
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

Codeforces Round 887是一个程序设计竞赛活动,由Codeforces组织举办。根据引用中的代码,该竞赛的题目要求解决一个序列操作的问题。给定一个长度为n的序列,通过执行一系列操作,使得序列变得非sorted,即非严格递增。具体操作是将序列中[1, i]范围内的数字全部加一,同时将[i+1, n]范围内的数字全部减一。问题要求求解最少需要执行多少次操作才能达到要求。 引用中的代码给出了解决这个问题的实现。代码首先读入序列的长度n和序列a。然后通过判断序列是否已经是非sorted,如果是则直接输出0。接下来,代码遍历序列,求出相邻两个数字的差的最小值。最后,计算出最少需要执行的操作次数,并输出结果。 需要注意的是,引用中的代码只是给出了解决问题的一种实现方式,并不代表Codeforces Round 887的具体题目和解答。要了解该竞赛的具体信息,需要参考Codeforces官方网站或相关资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Codeforces Round 887 (Div. 2)](https://blog.csdn.net/qq_36545889/article/details/131905067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值