首页 > 其他分享 >[Codeforces] CF1506C Epic Transformation

[Codeforces] CF1506C Epic Transformation

时间:2023-11-24 20:46:37浏览次数:27  
标签:10 int CF1506C sum Codeforces max Epic Transformation

Epic Transformation - 洛谷

算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死

题意

你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:

  • 选择 \(i,j\) 满足 \(*a_i\neq a_j*\) 然后删除 \(*a_i,a_j*\) 两个数。

求序列 a 经过若干次操作后最少有几个数,\(*T*\) 组数据。

\(1≤T≤10^4;1≤n,∑n≤2×10^5;1≤a_i≤10^9\)

思路

其实 证明 或 推导 更合适一些

这题,可以构造,当有\(n\)个数时,如果\(n\)为奇数,那么输出最小为\(1\),为偶数时,最小为\(0\)

那,如何构造呢?通过最大的一堆将其余的\(n-1\)堆变得相等即可。

设各数出现次数为数列a,则:

  1. 若\(max\{a\}>\sum ^n_{i=1}a_i-max\{a\}\):则最大的一种数无法被消完时其余各数串已经相等,答案为

\[max\{a\}-(\sum ^n_{i=1}a_i-max\{a\}) \]

  1. 若\(max\{a\}<\sum ^n_{i=1}a_i-max\{a\}\):说明可以消干净,答案因奇偶而定

所以最后答案就是

\[max\{\sum ^n_{i=1}a_i-max\{a\},n\%2\} \]

代码

#include<bits/stdc++.h>
using namespace std;
const int maxx=2e5+10;
int n,a[maxx],maxn,cnt;
int run()
{
	maxn=0,cnt=1;
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	sort(a,a+n);
	for(int i=0;i<n-1;i++)
	{
		if(a[i]==a[i+1]) cnt++;
		else
		{
			maxn=max(maxn,cnt);
			cnt=1;
		}
	}
	maxn=max(maxn,cnt);
//	cout<<maxn<<endl; 
	cout<<max(maxn-(n-maxn),n%2)<<endl;
	return 0;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		run();
	}
}

标签:10,int,CF1506C,sum,Codeforces,max,Epic,Transformation
From: https://www.cnblogs.com/lyk2010/p/17854719.html

相关文章

  • [Codeforces] CF1705C Mark and His Unfinished Essay
    题目传送门题意给定长度为\(n\)的字符串\(s\),进行\(c\)次操作,每次操作将\(s_l\)到\(s_r\)复制到字符串尾。全部操作结束后有\(q\)次询问,每次询问字符串\(s\)的第\(k\)位。数据保证\(r\)不超过当前字符串长度,\(k\)不超过最终字符串长度。思路及分析通过数......
  • [Codeforces] CF1858C Yet Another Permutation Problem
    YetAnotherPermutationProblem-洛谷这题本来很简单,思路我也想到了,但是代码一直没写对,思路也一直换来换去(悲然而发现最开始的思路是对的题意Alex收到了一个名为"GCD排列"的游戏作为生日礼物。这个游戏的每一轮进行如下操作:首先,Alex选择一个整数序列\(a_1,a_2,…,a_......
  • Codeforces Round 905 (Div. 3)
    CodeforcesRound905(Div.3)A.Morning题意:操作:显示,向前走都为一次操作;目标:显示这四个数思路:0->10,然后依次作差就行#include<bits/stdc++.h>usingnamespacestd;voidsolve(){chara[4];intmi=100,sum=4,b[4];for(inti=0;i<4;i++){cin>>a[i]......
  • Codeforces Round 903 (Div. 3)
    CodeforcesRound903(Div.3)A.Don'tTrytoCount大概题意给你两个字符串a,b。a串可进行的操作为将整个a串复制到之前的a串后面(直接用a+a即可),然后看操作多少次可以让b串变为a串的子串如果不能就输出-1。#include<iostream>usingnamespacestd;stringa,b;voidsolve()......
  • Codeforces Round 910 (Div. 2)
    CodeforcesRound910(Div.2)A.MilicaandString解题思路:统计给定字符串\(s\)中的\(B\)的数量,记录为\(cnt\)。如果\(cnt==k\):输出0;如果\(cnt<k\):从左往右数,将第\(cnt-k\)个\(A\)的位置前的数全部变成\(B\).如果\(cnt>k\):从左往右数,将第\(k-cnt\)个\(B\)的......
  • CodeForces 1898F Vova Escapes the Matrix
    洛谷传送门CF传送门Type\(1\)是简单的。直接输出空格个数即可。Type\(2\)也是简单的。显然要堵住不在起点和出口最短路上的格子,答案为空格个数减去起点到任一出口的最短路。考虑Type\(3\)。容易发现答案为空格个数减去起点到任两个出口的最短路(公共部分只算一次)。考虑......
  • Codeforces Round 697 (Div. 3)
    A.OddDivisor#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<string,string>PSS;constintN=......
  • CF1506C Epic Transformation
    CF1506CEpicTransformationEpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(a_i\neqa_j\) 然后删除 \(*a_i,a_j*\) 两个数。求序......
  • [Codeforces] CF1475C Ball in Berland 题解
    BallinBerland-洛谷题意在毕业典礼上,有​个男孩和​个女孩准备跳舞,不是所有的男孩和女孩都准备结伴跳舞。现在你知道​个可能的舞伴,你需要选择其中的两对,以便使没有人重复地出现在舞伴里,求可能的数量。思路暴力最朴素,也是简单的方法,就是通过暴力组合进行配对。#include......
  • Codeforces Round 905 (Div. 2)
    \(A.Chemistry\)https://codeforces.com/contest/1888/submission/233505834\(B.Raspberries\)https://codeforces.com/contest/1888/submission/233506474\(C.YouAreSoBeautiful\)题意:给定一个长\(n\)的序列\(a\)。对于区间\([l,r]\),如果\(a\)没有其它子序列(......