首页 > 其他分享 >D. Prefix Permutation Sums

D. Prefix Permutation Sums

时间:2023-10-06 16:57:54浏览次数:42  
标签:cnt int sum Sums Prefix Permutation

D. Prefix Permutation Sums

吐槽:读题不仔细,还以为原数组的取值是任意的,最后看题解的时候才发现取值在[1,n],当时因为看不懂直接跳过了

题意:给你一个缺了一个的前缀和数组,让你判断是否存在原数组,取值[1,n],每个数只存在一次

可以分类讨论
1 缺少最后一个前缀和
2 缺少前面的前缀和

方法:
我们设1加到n为sum
特判:
如果给定的数组的最后一个元素大于sum,那么不存在
对于1:(最后一个元素小于sum)
1.如果sum-a[n-1]>n,说明不存在,因为[1,n]不存在这个数
2.然后计算每一个相差的值,如果没有重复,则存在

对于2:(sum==a[n-1])
1.分析可知,在a[i-1],a[i],a[i+1],如果a[i]消失,那么a[i+1]-a[i-1],就是两个数的和
2.这两数和可能大于n,也可能小于n(如果小于n,则会有两个数重复),记录这两个数的和
3.从1到n遍历,看那个数还没有遍历到,将其累加起来
4.如果最后累加的和等于两数和,则存在

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
#define LL long long
LL a[N],cnt[N];
void solve() {
	int n;
	cin >> n;
	memset(cnt, 0, sizeof cnt);
	for (int i = 1; i < n; i++) cin >> a[i];
	LL sum = 1LL*n * (1LL*n + 1) / 2;
	if (a[n - 1] > sum) {//大于最大值,不满足直接退出
		cout << "NO\n";
		return;
	}
	if (a[n - 1] < sum) {//缺少最后一个前缀和
		if (sum - a[n - 1] > n) {//保证相差在[1,n]
			cout << "NO\n";
			return;
		}
		int ans = 1;//记录出现次数
		cnt[sum - a[n - 1]]++;
		for (int i = 1; i < n; i++) {
			int x = a[i] - a[i - 1];
			if (!cnt[x]) {
				cnt[x] = 1;
				ans++;
			}
		}
		if (ans == n) {
			cout << "YES\n";
			return;
		}
		else cout << "No\n";
		return;
	}
	//缺少前面的前缀和
	int mx = 0;
	for (int i = 1; i < n; i++) {//寻找max值
		int x = a[i] - a[i - 1];
		if (x > n) mx = x;
		else if (cnt[x] == 1) mx = x;
		cnt[x]++;
	}
	int k = 0;
	for (int i = 1; i <= n; i++) {
		if (cnt[i] == 0) k += i;//没有标记的数
	}
	if (k == mx) {//如果没有标记的两数等于最大值,那么存在
		cout << "YES\n";
	}
	else cout << "NO\n";
}
int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	cin >> t;
	while (t--) {
		solve();
	}
	return 0;
}

标签:cnt,int,sum,Sums,Prefix,Permutation
From: https://www.cnblogs.com/bu-fan/p/17744708.html

相关文章

  • [题解]CF1748C Zero-Sum Prefixes
    UPD23.10.3更新的对思路的描述,以及代码。思路对于每一个\(a_i=0\),如果我们将它变为\(x\),都可以直接将\(i\simn\)位置上的前缀和加\(x\)。设\(a_j\)是\(a_i\)后第一个\(0\),那么,在\(j\)时同样有上述规律。所以,我们只需在\(i\)时考虑,\(i\sim(j-1)\)的贡......
  • P3477 [POI2008] PER-Permutation 解题报告
    我咕咕咕了这道题半年之久?好像洛谷好多题解都被hack了啊,但是没有被撤。(本题解现有hack均通过)题目链接折叠题干[POI2008]PER-Permutation题目描述Multisetisamathematicalobjectsimilartoaset,buteachmemberofamultisetmayhavemorethanonemem......
  • [CF1810G] The Maximum Prefix
    题目描述You'regoingtogenerateanarray$a$withalengthofatmost$n$,whereeach$a_{i}$equalseither$1$or$-1$.Yougeneratethisarrayinthefollowingway.First,youchoosesomeinteger$k$($1\lek\len$),whichdecid......
  • 【刷题笔记】60. Permutation Sequence(改)
    题目Theset [1,2,3,...,*n*] containsatotalof n!uniquepermutations.Bylistingandlabelingallofthepermutationsinorder,wegetthefollowingsequencefor n =3:"123""132""213""231""312"&quo......
  • CF1677D Tokitsukaze and Permutations
    好玩题。对于一个排列\(p\),进行\(k\)轮冒泡,记\(v_i=\sum_{j<i}[p_j<p_i]\),给定\(v_i\),部分值不确定,求合法的\(p\)的个数。\(p\)由\(v\)唯一确定。考虑一个个加数字进去,每次可以判断加入数字与前面数字的相对大小,于是可以确定原排列。只用研究\(v\),不用......
  • HBase HFile与Prefix Compression内部实现全解--KeyValue格式
    1.引子 HFile(HBaseFile)是HBase使用的一种文件存储格式的抽象, 目前存在两种版本的HFile:HFileV1和HFileV2 HBase0.92之前的版本仅支持HFileV1,HBase0.92/0.94同时支持HFileV1和HFileV2。 以下分别是HFileV1/V2的结构图: HFileV1HFileV2(注:这两个图片在hbase......
  • CF1542E1 Abnormal Permutation Pairs (easy version) 题解
    CF1542E1AbnormalPermutationPairs(easyversion)题解不会Hardversion对于第一个限制字典序,我们可以考虑枚举前\(i\)位相同,然后考虑后\(n-i\)位。我们只需要保证\(p_{i+1}<q_{i+1}\)即可。我们设\(len=n-i\)。由于前\(i\)位完全相同,所以前\(i\)位内部......
  • CF1867A green_gold_dog, array and permutation
    思路很简单的一道题,洛谷大概都不会开放题解通道?(实际上貌似每场比赛的A都没开放?)显然,对于原数组较小的数,我们尽量让大的数,取全排列的较小的数,这样可以保证差是逐渐变小的,也就让\(c\)数组差异变大。所以直接拿个struct存,然后两边排序就好。ACcode#include<bits/stdc++.h>......
  • 【刷题笔记】46. Permutations
    题目Givenacollectionof distinct integers,returnallpossiblepermutations.Example:Input:[1,2,3]Output:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]题目大意给定一个没有重复数字的序列,返回其所有可能的全排列。解题思路求出一......
  • 【CF1364C】Ehab and Prefix MEXs(构造)
    题目大意:给出长度为\(n(1\len\le10^5)\)的数组\(a\),构造数组\(b\)使得\(a_i=MEX\{b_1,b_2,...,b_1\}\)首先考虑当\(b_1,b_2,...,b_n\)为什么数时,\(a_n=MEX\{b_1,b_2,...,b_n\}\)。然后再考虑当\(b_1,b_2,...,b_{n-1}\)为什么数时,\(a_{n-1}=MEX\{b_1,b_2,...,b_{n-1}\}\)。......