首页 > 其他分享 >12.30日 vp Codeforces Round #836 (Div. 2)

12.30日 vp Codeforces Round #836 (Div. 2)

时间:2022-12-30 19:12:25浏览次数:46  
标签:... 836 题意 奇数 int 12.30 Codeforces a1 字符串

A. SSeeeeiinngg DDoouubbllee

题意:
第一题题意很简单,即给出一个字符串,创造一个新字符串使得其是原字符串的两倍,且为一个回文串。
思路:
将原字符串倒置成为新字符串,然后接到原字符串后面即可

void solve()
{		
	string s, t;
	cin >> s;
	t = s;
	reverse(t.begin(), t.end());
	cout << s + t << endl;
}

B - XOR = Average

题意:
给出一个n,求满足下列等式的a1,a2,a3...an

思路:
将左式的连续异或看做常数c,整理式子即为n * c = a1 + a2 + a3 + ... + an
如要满足式子,则其中一种解法为:使a1,a2...an全为c
于是分为两种情况
1.如果n为奇数,当a数组全为c时,异或值同样始终为c,满足等式,c为任意值。
2.如果n为偶数,若a数组全为c,则异或值为0。思考如何让a数组大部分值等于c,且异或值也为c。即输出n - 2 个c和一个1,一个c + 1。

void solve()
{		
	int n;
	cin >> n;
	if (n % 2 == 1){
		for (int i = 1; i <= n; i ++) cout << 1 << ' ';
		cout << endl;
	}else {
		for (int i = 1; i <= n - 2; i ++) cout << 2 << ' ';
		cout << 1 << ' ' << 3;
		cout << endl;
	}
}

C. Almost All Multiples

题意:给出n,x,代表有n个数的排列和排列第一个数字是x,最后一个数字是1。排列中其他元素必须满足pi % i == 0,求最小字典序且满足条件的排列.
思路:
首先题意其实告知的就是给出一个最小排列,a1和an交换,然后a1和ax交换后的初始化数组,也就是说,在满足n % x == 0的条件下,我们需要找到它的最小字典序,也就是假如排列后有满足n % i == 0 && i % x == 0的情况,就可以将x后移,否则输出-1。

void solve()
{		
	int n, x;
	cin >> n >> x;
	for (int i = 1; i <= n; i ++) a[i] = i;
	swap(a[n], a[1]);
	swap(a[1], a[x]);
	if (n == x){
		swap(a[n], a[1]);
		for (int i = 1; i <= n; i ++) cout << a[i] << ' ';
		cout << endl;
	}
	else if (n % x == 0){
		int id = x;
		for (int i = x + 1; i < n; i ++){
			if (n % i == 0 && i % id == 0){
				swap(a[id], a[i]);
				id = i;
			}
		}
		for (int i = 1; i <= n; i ++) cout << a[i] << ' ';
		cout << endl;
	}else {
		cout << -1 << endl;
	}
}

D. Range = √Sum

题意:给一个n,求出满足下列等式的a1,a2,a3...an

思路:分成奇数偶数分别判断
1.若n为偶数,则n-3,n-2,n-1,n+1,n+2,n+3的和为n方,且an-a1=6=n,故只需要输出n左右两边n/2项即可
2.若n为奇数,会复杂一些。因为an-a1=n为奇数会不好算,则设n+1为极差,又因为n为奇数,所以左右两边项数不一致。做法是,将最左边的那项移去,加到n+1右边的(n+1)/2项中,即可保证n项之和为(n+1)方.
设tmp为(n+1)/2,极差为:n+2+tmp-(n+2-tmp)==n+1.故得证。

void solve()
{		
	int n;
	cin >> n;
	if (n % 2 == 0){
		for (int i = n - n / 2; i < n; i ++) cout << i << ' ';
		for (int i = n + 1; i <= n + n / 2; i ++) cout << i << ' ';
		cout << endl;
	}else {
		int tmp = (n + 1) / 2;
		for (int i = n + 2 - tmp; i <= n; i ++) cout << i << ' ';
		for (int i = n + 3; i <= n + 2 + tmp; i ++) cout << i << ' ';
		cout << endl;
	}
}

总结:对于构造题,思路要灵活放开,对数字要有敏感性。规律其实并不复杂,但推出规律会很难。

对于给出一个n,求a数组的构造题,可以从n的奇偶性之类的着手,先求出一种的规律,另一种肯定和它大差不差。
对于给出公式要求规律的构造,可以考虑将公式变形,得到较为方便的形式以便推出规律。

标签:...,836,题意,奇数,int,12.30,Codeforces,a1,字符串
From: https://www.cnblogs.com/lbzbk/p/17015665.html

相关文章

  • 2022.12.30
    盘符切换盘符+':'查看当前目录下的所有文件dir切换目录cd(changedirectory)同盘符:cd目录名+':'不同盘符:cd/d盘符名+':'+\目录名返回上一级cd..清理屏......
  • CodeForces 1349F1 Slime and Sequences (Easy Version)
    洛谷传送门CF传送门发现样例中所有数的和为\(n!n\),于是猜想好的序列总数为\(n!\)。考虑将每一个排列\(p\)唯一对应一个好的序列\(a\)。可以这么构造:在\(p\)中顺......
  • Codeforces 891 A. Pride 做题记录(DP)
    原题链接:https://codeforces.com/problemset/problem/891/A一个比较显然的性质是如果序列的总$gcd$不为$1$,那么肯定是不存在解的。因为不管怎么样,都有一个因子无......
  • 「Note」闲话 2022.12.30(《浅谈Splay与Treap的性质及其应用》学习笔记)
    屎一样的一年还有两天就过去了呢。感觉都阳了一周了还是没有回复到正常状态,真的挺讨厌的。今天随便找了篇论文假学习了一会儿。由于懒,所以大量内容属摘抄。平衡树的fin......
  • Codeforces Round #838 (Div. 2) A-B,补C,D
    A.DivideandConquer题意:给定n个数,每次操作可以使得:$$\lfloor\frac{ai}{2}\rfloor$$,求最少的操作次数使得n个数的总和为偶数。分析:和为偶数,res=0和为奇数,暴力......
  • Codeforces 1253 C. Sweets Eating 做题记录(DP)
    很明显,贪心策略是先吃甜度大的可以保证最终的总甜度最小,因此我们先从小到大排个序。一天可以吃$m$个,因此我们对于每个$k$,就让甜度前$1~m$名在第一天吃,前$m+1~2m$名第二......
  • [Codeforces Round #841]
    [CodeforcesRound#841]CodeforcesRound#841(Div.2)andDividebyZero2022A.JoeyTakesMoneyJoeyTakesMoneProblem:给一个正整数序列\(a_1,a_2,…,a_n(n......
  • Codeforces 1336 F Journey 题解
    题目链接这题的方法口糊一下没有很难,没达到3500的水准。但是写起来才发现是真的恶心(主要是容易写错),没写过这么累的题,可能难度就体现在这里吧。计数的时候是要分类讨论......
  • Codeforces Round #690 (Div. 3) E1. Close Tuples (easy version) (贪心+思维)
    https://codeforces.com/contest/1462/problem/E1E1.CloseTuples(easyversion)题目大意:给定一个长度为n的序列a,由1到n的整数组成,某些元素可能相等。找出m=3个元......
  • Codeforces 1336 F Journey 题解
    题目链接这题的方法口糊一下没有很难,没达到3500的水准。但是写起来才发现是真的恶心(主要是容易写错),没写过这么累的题,可能难度就体现在这里吧。计数的时候是要分类讨论......