首页 > 其他分享 >1.27 vp Codeforces Round #845 (Div. 2) and ByteRace 2023

1.27 vp Codeforces Round #845 (Div. 2) and ByteRace 2023

时间:2023-01-27 11:33:34浏览次数:45  
标签:845 int Codeforces 奇偶性 vp 因子 num cnt 逆序

A - Everybody Likes Good Arrays!

题意(构造)

给出序列a,需要使a中元素以相邻元素奇偶性不同排列,你可以进行若干操作:将一对相邻奇偶性相同的元素相乘
问最少需要多少次操作

思路

相当于消消乐,奇偶性相同的子序列一定只能保留一个,故观察什么时候奇偶性发生变化即可

void solve() {
	int n;
	cin >> n;
	vector<int> a(n + 1);
	for (int i = 1; i <= n; i ++) cin >> a[i];
	
	int t = a[1] & 1, cnt = 0;
	for (int i = 2; i <= n; i ++) {
		if (a[i] % 2 == t) cnt ++;
		else {
			t = t ^ 1;
		}
	}
	
	cout << cnt << endl;
}

\[\]

B - Emordnilap

题意(计数)

给出一个长度为n的排列,然后将其倒转接在后面,问按照这样规定的n!个排列会产生多少逆序对

思路

模拟几个数字后可知,对于一个含有n个元素的序列,所有含有n个元素的排列的逆序对数量都相等,故只需要求出其中一种排列的逆序数量然后乘n!即可
如:
序列123 会产生6种不同排列
我们只需观察123321这个序列会产生多少个逆序
序列:123321
贡献:012210
据观察可知逆序数量等于有n-1个元素首项为1,公差为1的等差数列和乘2

void solve() {
	int n;
	cin >> n;
	int x = (LL)n * (n - 1) % MOD;         //求出每种会产生多少个逆序
	for (int i = 1; i <= n; i ++) {        //乘以n!
		x = (LL)x * i % MOD;
	}
	
	cout << x << endl;
}

\[\]

C - Quiz Master

题意(排序+双指针)

给出n个数字,上限m
问从这个n个数字中能将1~m全部整除的一组数的极差最小值为多少

思路

先将n个数字排序,然后用双指针求出极差最小的满足条件的区间l,r

void solve() {
	int n, m;
	cin >> n >> m;
	vector<int> a(n + 1), cnt(m + 1, 0);              //cnt数组为记录1~m中每个因子在区间内的数量
	int num = 0;                                      //num为记录l,r区间包含多少个因子
	for (int i = 1; i <= n; i ++) cin >> a[i];
	sort(a.begin() + 1, a.end());
	
	auto ins = [&](int x) {                          //添加一个因子,若该因子数量恰好为一,则num加一
		if (x < 1 || x > m) return ;
		cnt[x] ++;
		if (cnt[x] == 1) num ++;
	};
	auto del = [&](int x) {                          //删除一个因子,若该因子数量恰好为零,则num减一
		if (x < 1 || x > m) return ;
		cnt[x] --;
		if (cnt[x] == 0) num --;
	};
	
	int l = 1, r = 0, ans = INF;
	
	for (int l = 1; l <= n; l ++) {                       //枚举l,求能满足条件的l,r区间
		while (num != m) {
			if (r == n) break;
			for (int i = 1; i <= sqrt(a[r + 1]); i ++) {
				if (a[r + 1] % i == 0) {
					ins(i);
					if (a[r + 1] / i != i) {
						ins(a[r + 1] / i);
					}
				}
			}
			r ++;
		}
		
		if (num == m) ans = min(a[r] - a[l], ans);
		
		for (int i = 1; i <= sqrt(a[l]); i ++) {
			if (a[l] % i == 0) {
				del(i);
				if (a[l] / i != i) del(a[l] / i);
			}
		}
	}
	
	if (ans == INF) cout << -1 << endl;
	else cout << ans <<endl;
}

总结:构造和计数类问题刷的比较多,反应较快。算法方面落后了。对于求类似极差的问题很容易可以想到区间,区间又可以想到双指针

标签:845,int,Codeforces,奇偶性,vp,因子,num,cnt,逆序
From: https://www.cnblogs.com/lbzbk/p/17068685.html

相关文章

  • Codeforces 708 A-E1题解
    A.Meximization这道题问给一些数,如何让前缀的mex之和最大,那么首先,我们要抬mex的话肯定是要把前面都铺垫完的,所以在i位置确定的时候,i+1自然是越大越好,可以证明i+1的位......
  • Codeforces Round 846
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1780。执念就像是记错的二级结论一样可怕的东西。冥冥之中有一种结论错了的感觉,但总是觉......
  • Codeforces 44E Anfisa the Monkey
    https://codeforces.com/contest/44/problem/E高级又好像很低级的诈骗首先不难得到\(a\timesk>|s|\texttt{or}b\timesk<|s|\)无解。对于每一组考虑先填上\(a\)......
  • Codeforces Round #846 (Div. 2) E. Josuke and Complete Graph(数论分块)
    题意:给定一个区间[L,R],求其中任意两个数字的gcd的不同的种类总数。链接:https://codeforces.com/contest/1780/problem/E其中L<=1e9,1<=L<=R<=1e18。tips:本篇题解中除标......
  • vp CodeForces 合集
    由于这只蒟蒻 非常不想熬夜打CF 经常忘了要打CF,然后再加上能力很踹,于是就弱弱的来vpCF了。(我不会说我vp时用的是这个号)Contest1792 ......
  • Educational Codeforces Round 142 (Rated for Div. 2)
    题目链接A核心思路水题,想清楚代价就好了。//Problem:A.GamingForces//Contest:Codeforces-EducationalCodeforcesRound142(RatedforDiv.2)//URL:htt......
  • Codeforces Round #846 (Div. 2)
    E.JosukeandCompleteGraph题目抽象为求\(\gcd(i,j)\)有多少种\((i\neqj,i\in[l,r],j\in[l,r])\),如:当\(l=2,r=4\)时,\(\gcd(2,4)=2\),\(\gcd(2,3)=\gcd(3,4)=1\)......
  • Educational Codeforces Round 142 (Rated for Div. 2)
    E.DivisorsandTable\(m=m_1\cdotm_2\)找\(m\)的所有因子,记为数组\(x\)。对于\(x_i\),找它的最大的小于等于\(n\)的因子\(y\),那么\(x_i\)的贡献为\(\frac{x......
  • CF 1780-D. Bit Guessing Game_Codeforces Round #846 (Div. 2) D
    一道交互题有一个数字a(1<=a<=1e9),给出它的二进制表示中'1'的数目最多30次询问,每次询问输出"-x",之后给出a-x后的二进制表示中'1'的数目,最后以这样的形式"!ans"输出原数字......
  • Codeforces Round #846 (Div. 2) 解题报告
    CodeforcesRound#846(Div.2)解题报告\(\text{ByDaiRuiChen007}\)ContestLinkA.HayatoandSchool简单题,发现答案要么是一奇两偶、要么是三个奇数,分别考虑两种......