首页 > 其他分享 >CF1856B Good Arrays

CF1856B Good Arrays

时间:2023-10-07 21:57:54浏览次数:34  
标签:Good Arrays CF1856B int ch -- include sum define

题意简述:

给定一个序列 \(a\),我们定义一个序列 \(b\) 是好的当且仅当对于 \(1\dots n\) 内的每一个 \(i\),\(a_i\neq b_i\) 且 \(\sum_{i=1}^na_i=\sum_{i=1}^nb_i\)(\(a_i\),\(b_i\) 均为正整数)。

现在有 \(T\) 组数据,每组数据给定 \(n\) 和序列 \(a\),判断是否存在一个合法的序列 \(b\)。若存在输出 YES,否则输出 NO。

solution

我们考虑让每一个 \(a_i\) 加上或减去一个数,并且总和不变。

定义 \(sum\) 为当前的变化总量。

可以贪心考虑:让每一个 \(b_i\) 都为 \(1\),并且让 sum+=a[i]-1,而 \(a_i=1\) 的情况 \(b_i\) 就变为 \(2\),并让 sum--,这样可以保证当前的变化量最大,可供后面数的选择就多。

若最后 \(sum<0\),由于每一步取的都是最大变化量,则说明无解

若 \(sum\ge 0\),若存在 \(b_i=2\),可以将 \(sum\) 加到这个 \(b_i\) 上;若不存在,则 \(sum=\sum_{i=1}^na_i-1\),令 \(b_n\) 加上 \(sum\),一定 \(>a_i\)。当然了 \(n=1\) 的情况一定无解,需要特判掉。

code

#include<cmath>
#include<cstring>
#include<string>
#include<utility>
#include<vector>
#include<queue>
#include<bitset>
#define FOR(i,a,b) for(register int i=a;i<=b;i++)
#define ROF(i,a,b) for(register int i=a;i>=b;i--)
#define mp(a,b) make_pair(a,b)
#define pll pair<long long,long long>
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
inline int read();
typedef long long ll;
const int N=1e5+5;
const int INF=0x3f3f3f3f;
int n,m,k;
int main()
{
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		ll sum=0;
		FOR(i,1,n){
			scanf("%d",&k);
			if(k==1) sum--;
			else sum+=k-1;
		}
		if(sum<0||n==1) puts("NO");
		else puts("YES");
	}
	return 0;
}


inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return f*x;
}

另:电脑没网,手机写的,大家点个赞支持一下qwq

标签:Good,Arrays,CF1856B,int,ch,--,include,sum,define
From: https://www.cnblogs.com/LHLeisus/p/17747566.html

相关文章

  • 代码源:a-good string(CF1385D,分支)
    传送点击查看代码#include<bits/stdc++.h>usingnamespacestd;chars[131080];int_solve(intL,intR,charx){ if(L==R)returns[L]!=x; intM=L+(R-L)/2; intt1=0,t2=0; for(inti=L;i<=M;++i)if(s[i]!=x)t1++; for(inti=M+1;i<=R;++i)if(s[i]!=x)......
  • Go - Creating JSON Data Byte Arrays from Structs
    Problem: YouwanttocreateJSONdatafromastruct.Solution: Createthestructsthenusethejson.Marshalorjson.MarshalIndenttomarshalthedataintoaJSONsliceofbytes. funcmain(){person:=struct{}data,err:=......
  • Arrays常用方法
    1.Arrays.toString()方法方法作用:快速输出数组内容int[]a={1,2,3,4,5};System.out.println(Arrays.toString(a));//输出格式:[1,2,3,4,5]2.Arrays.sort()方法方法作用:给数组排序,默认升序int[]a=newint[5]{5,4,3,2,1};Arrays.sort(a);//12345System.out.printl......
  • 10 Rules of Good and Bad Studying 学习的10条好与坏规则
    10RulesofGoodStudying良好学习的10条法则Userecall.Afteryoureadapage,lookawayandrecallthemainideas.Highlightverylittle,andneverhighlightanythingyouhaven’tputinyourmindfirstbyrecalling.Tryrecallingmainideaswhenyouare......
  • Java Arrays.fill() 方法详解
    在Java编程中,数组是一个非常常见的数据结构,而Java提供了许多有用的数组操作方法来简化开发过程。其中之一是Arrays.fill()方法,它允许我们填充一个数组的所有元素,将它们设置为指定的值。在本篇文章中,我们将深入探讨Arrays.fill()方法的用法、参数和示例,以帮助您更好地理解和使用它。......
  • Technocup 2022 - Elimination Round 2 Two Arrays
    给定两个数组\(a_1,a_2,\cdots,a_n\)和\(b_1,b_2,\cdots,b_n\)。定义\(a\)的一次操作:选择任意一个非负整数\(k(0\leqk\leqn)\)。选择任意\(k\)个独立的下标\(i_1\leqi_2\leq\cdots\leqi_k\leqn\)。对\(a_{i_1},a_{i_2},\cdots,a_{i_k}\)......
  • Arrays.binarySearch 详解
    Arrays.binarySearch详解前提:非降序排序数组binarySearch(Object[]a,Objectkey)a:待搜索的数组key:要搜索的值逻辑条件可以找到:返回一个>=0的索引找不到:【从1开始计数】在数组范围内,返回-(key将要插入的位置)不在范围内:返回-1或者-(len+1)......
  • Friendly Arrays题解
    2023-09-18题目FriendlyArrays难度&重要性(1~10):5题目来源luogu题目算法贪心解题思路一道大水题。这道题解法非常的套路,我们需要对于处理按位或和按位异或时,首先就要把数拆成二进制的形式去考虑。首先我们需要简单了解一下按位或和按位异或的运算规则:按位或,对于两......
  • CF1599E Two Arrays
    Dq17y。考虑斐波那契通项公式,分别维护区间\(\left(\frac{1+\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)和\(\left(\frac{1-\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)的和。显然可以扩域,定义一个\(n=a+\sqrt5b\)的结构体即可。然后快速求斐波那契数列某项就可以直接快速幂了。......
  • CF1852B Imbalanced Arrays 题解
    CF1852BImbalancedArrays题解Links洛谷CodeforcesDescription对于一个给定的长度为\(n\)的数组\(A\),定义一个长度为\(n\)的数组\(B\)是不平衡的当且仅当以下全部条件满足:\(-n\leqB_{i}\leqn\)且\(B_{i}\ne0\)。即每个数在\([-n,n]\)内且不为\(0\)。......