首页 > 其他分享 >CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)(A-D)

CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)(A-D)

时间:2023-09-19 11:46:52浏览次数:45  
标签:Rated ai int solve Prizes 数组 -- Div

CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)

A.让你找mex为k的n个数,这n个数从0-x,问n个数的和最大值是多少

先判断不行的。然后行的肯定有0-k-1,剩下还有就选x就行。

查看代码

#include<iostream>
using namespace std;
typedef long long ll;
void solve()
{
	int n,k,x;
	cin>>n>>k>>x;
	if(n<k||x<k-1)
	{
		cout<<-1<<'\n';
		return;
	}
	int ans=k*(k-1)/2;
	int lef=n-(k);
	if(x>k)ans+=lef*x;
	else ans+=lef*(k-1);
	cout<<ans<<'\n';
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)solve();
	return 0;
}

B.给n个元素数组a和m个元素数组b,每次你可以任选一个bj元素,让ai=ai|bj,若干次操作,问a数组的异或和最小和最大分别是多少。

我们把n分奇偶来看。

n是奇数的时候,我们会发现无论你操作几次,最后都相当于最后操作一次,那么最小值就是原序列的异或合,最大值再或上b数组或和即可

n是偶数的时候,a数组里最后是1的位,如果这一位b的或和也为1,那么在操作后这一位就能变成0,最小值就是a-(a&b),最大值就是a

查看代码
 #include<iostream>
using namespace std;
void solve()
{
	int n,m,x=0,y=0,a,b;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a;
		x^=a;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>b;
		y|=b;
	}
	if(n%2)
		cout<<x<<' '<<(x|y)<<'\n';
	else
		cout<<(x-(x&y))<<' '<<x<<'\n';
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)solve();
	return 0;
}

C.给一个n个元素数组a,里面有k种数,构成n*n的方阵b,bij=min(a[i],a[j])。对于每一个i(1<=i<=k)问能把方阵里值为i包括起来的最小方阵的长宽之和是多少

对于a[i],如果它前面有a[j]>a[i],那么相应的b[j][i]和b[i][j]都是a[i],对于后面也是如此

那么我们只需要找到在颜色i之前颜色大于i的最小下标作为l,在i之后颜色大于i的最大下标r,那么对于i的答案就是(r-l+1)*2

当我们依次从1到k枚举的时候有个性质。我们找到了a[l]>i,那么1-l-1中就必然没有大于i+1的。所以我们可以O(n)地求出答案

对于没有出现的元素。输出0即可

查看代码
 #include<iostream>
using namespace std;
int n,k,a[100005],ans[100005];
bool vis[100005];
void solve()
{
	for(int i=1;i<=k;i++)vis[i]=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		vis[a[i]]=1;
	}
	int r=n,l=1;
	for(int i=1;i<=k;i++)
	{
		while(r>0&&a[r]<i)r--;
		ans[i]=r;
	}
	for(int i=1;i<=k;i++)
	{
		while(l<=n&&a[l]<i)l++;
		ans[i]-=l;
	}
	for(int i=1;i<=k;i++)
		cout<<(ans[i]+1)*2*vis[i]<<' ';
	cout<<"\n";
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)solve();
	return 0;
}

D.一开始有k的钱,有n个位置,在第i个位置购买1需要ci,买后1-i都会增加1,问买任意次任意物品后最大字典序是多少

对于ai,ai+1,ai<ai+1,我们先贪心地去买ai,然后再去买ai+1发现买不了,有可能最优解是少买几个ai,然后再买几个ai+1,我们该如何后悔呢?

假设最多买x个ai,然后最优解是买y个ai和z个ai+1,而x==y+z,如果y+z<x,那么不如全买x的字典序更大了。

我们怎么求的z呢?假设买ai前是k,到买ai+1的时候剩下k-y*ai,然后z=(k-y*ai)/(ai+1),买这两个的花费是y*ai+z*(ai+1)=y*ai+z*ai+z*(ai+1-ai)

可以换成x*ai+z*(ai+1-ai),那么我们只要减去前面买的价格后再计算买,就实现所谓的后悔贪心了。

对于ai,ai+1,ai>ai+1,那么最优的肯定是买后面的,而这个位上的答案也是后面的小的。

所以我们可以把数组处理成它后面最小的,然后O(n)处理下数组即可

查看代码
 #include<iostream>
using namespace std;
int n,k,c[200005];
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>c[i];
	cin>>k;
	for(int i=n-1;i>0;i--)c[i]=min(c[i],c[i+1]);
	int a=k;
	for(int i=1;i<=n;i++)
	{
		int add=c[i]-c[i-1];
		a=min(a,add?k/add:a);
		k-=add*a;
		cout<<a<<" \n"[i==n];
	}
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)solve();
	return 0;
}

标签:Rated,ai,int,solve,Prizes,数组,--,Div
From: https://www.cnblogs.com/qbning/p/17714206.html

相关文章

  • cf1869 div.1,div.2做题记录
    赛时总结div.2A题面对于任意一个区间,我们可以通过一次操作将区间内的数变得全部相同。如果区间内的全部数都相同,那么我们再做一遍区间操作,当这个区间长度为偶数时,区间异或和为\(0\),会清空区间;当区间长度为奇数时,区间内的数不会发生改变。但我们可以将一个长度为奇数的区间拆成......
  • Codeforces Round 897 (Div. 2) A-E
    A.green_gold_dog,arrayandpermutation题意:给出一个长为\(n\)的数组\(a\),找到一个长为\(n\)的排列\(b\),使得\(a\)与\(b\)对应位置上的元素的差尽可能大Solution将数组\(a\)排序,然后令排列\(n,n-1,...,2,1\)对应到对应的元素即可structnode{intx,id;boolope......
  • css让某个view/div 定在某一个位置不动
    position:absolute 可以定位在某个位置,但是会跟着滚动条的位置而改变。postion:fixed可以定位在某个位置,并且也不会跟着滚动条的位置而改变。 postion:fixedleft:0px;bottom:0px; 会定位在底部左边位置。比如返回顶部/返回等。......
  • div 让a内容居中方法
    <div>标签是HTML中的一个重要标签,它代表了一个文档中的一个分割区块或一个部分。在<div>标签中,我们可以放置各种内容,包括文本、图像、链接等等。有时候,我们需要将其中的链接<a>标签的内容水平居中显示,这就需要使用CSS设置div内部链接的居中显示。本文将详细讲解如何使用CSS使得<di......
  • Deltix Round, Autumn 2021 (open for everyone, rated, Div. 1 + Div. 2) A. Divide
    有一个长为\(n\)的数组,可以执行以下整份操作任意次:选择任意两个数\(a_i,a_j\),满足\(2\mida_i\)\(a_i=\frac{a_i}{2}\)\(a_j=2\cdota_j\)请找到经过任意此操作后的最大\(\sum_{i=1}^{n}a_i\)。在唯一分解定理下讨论两个数\(a_i=2^{\alpha_i}\cdotx,a......
  • 如何使用透明的div实现页面背景模糊效果
    要在页面背景上实现模糊效果,并使内容区域(<div>)保持半透明,你可以使用CSS的backdrop-filter属性。这个属性可以用于设置页面背景的滤镜效果,而不影响内部内容的模糊。下面是一个示例的代码片段,展示如何实现这个效果:<!DOCTYPEhtml><html><head><title>背景模糊效果</title>......
  • Codeforces Round 764 (Div. 3) B. Make AP
    有三个正整数\(a,b,c\)。需要执行以下操作严格一次:选择任意一个正整数\(m\)并让严格一个\(a,b,c\)之一乘以\(m\)。但不能改变他们的顺序。回答是否可以经过一次操作后使\(a,b,c\)变为等差。分类讨论题:三种情况满足一种即可。(已知\(a,b,c\geq1\))\(ma......
  • Codeforces Round 773 (Div. 2) B. Power Walking
    有\(n\)个增幅道具,第\(i\)个道具种类为\(a_i\),一个人的强度\(w\)为他所有道具的种类数。对于\(k]\in[1,n]\),询问将\(n\)个道具分配给\(k\)个人且每个人至少分配到一个道具后,能够得到的最想强度和\(\sum_{i=1}^{n}w_i\)。观察一:最低强度和\(\sum_{i=1}^{k}w......
  • Codeforces Round 897 (Div. 2) 考试总结
    前言这次打得很好,相较于div3的脑残题和签到题来说,div2的思维难度更加的大。同时还有除传统题外,其他的题型出现。比如交互题等。这次能在考场上想出三道较于之前是有很大的进步的。赛时实况:ABCDE1E2F√√√××××赛后改题情况:ABCDE1E2F......
  • 9.12 div.1
    EducationalCodeforcesRound100(RatedforDiv.2)EducationalCodeforcesRound101(RatedforDiv.2)EducationalCodeforcesRound102(RatedforDiv.2)B-FindTheArray思路:相邻的数要有一方能整除另一方,那么一方为1的话一定可以,按奇偶位置将数分为两部分,求出a......