首页 > 其他分享 >Codeforces Round #838 (Div. 2)

Codeforces Round #838 (Div. 2)

时间:2022-12-17 12:00:23浏览次数:59  
标签:Node const int 838 Codeforces cin solve last Div

题目链接

A

核心思路:首先我们得清楚一个点,那么就是如果有不符合条件的数列,那么我们也只有以下两种操作:

  • 把其中一个偶数变为奇数
  • 把其中一个奇数变为偶数

所以这个问题就迎刃而解了:我们只需要记录每一个数变为另外的数的最小操作数(也就是奇数变为偶数,偶数变为奇数),然后我们取一个最小值就好了.

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a[N];
const int INF = 0x3fff;
void solve()
{
	int n;
	cin >> n;
	int cnt = 0;
	int ma = INF;
	int yi=0;
	for (int i = 0;i < n;i++)
	{
		cin >> a[i];
		int b = a[i];
		yi ^= a[i]&1;
		int t = 0;
		while (a[i] % 2 == b % 2)
		{
			t++;
			b /= 2;
		}
		ma = min(ma, t);
	}
	cout << (yi ? ma : 0) << endl;
}
int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		solve();
	}
}

B

核心思路我们一定要注意一个很重要的条件:那就是每次都得操作n次.所以我们直接构造\(2^n\)的数列就好了.

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int INF = 0x3fff;
int n, a;
//struct Node{
//	int t;
//int idx;
//}a[N];
//int cmp(Node x, Node y)
//{
//	return x.t < y.t;
//}
void solve()
{
	cin >> n;
	cout << n << endl;
	for (int i = 1;i <= n;i++)
	{
		int x;
		cin >> x;
		int k = ceil(log2(x));
		cout << i << " " << (1 << k) - x << endl;
	}
}
int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		solve();
	}
}

C

核心思路:这个题目明显是一个贡献题,遇到这个贡献题其实我们我们首先应该想的是前一个位置会对后一个位置产生什么影响,也就是s[i]对s[i-1]的影响.所以就是一个前后的递推关系,至于这个关系怎么得到呢,我们可以先根据样例来模拟来推导这个最一般的关系,然后再把这种情况推导到一般的情况。

这个题目我们可以很明显的看出这种递推关系:

  1. \(s[i]!=s[i-1]\),那我们的上一个位置对这个位置就直接加倍了:last*2;
  2. \(s[i]==s[i-1]\),那我们的上一个位置对我们这个位置基本没有贡献:last=1;

所以我们只需要枚举last就好了,然后迭代更新就好了.

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const int INF = 0x3fff;
int n, a;
int mod = 998244353;
typedef long long LL;
//struct Node{
//	int t;
//int idx;
//}a[N];
//int cmp(Node x, Node y)
//{
//	return x.t < y.t;
//}
void solve()
{
	cin >> n;
	string s;
	cin >> s;
	s = "?" + s;
	LL ans = 0;
	LL last = 0;
	for (int i = 1;i <= n;i++)
	{
		if (s[i] == s[i - 1])
		{
			last = last * 2 % mod;
			ans =(ans+last)%mod;
		}
		else
		{
			last = 1;
			ans=(ans+1)%mod;
		}
	}
	cout << (ans % mod+mod)%mod << endl;
}
int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		solve();
	}
}

d题待补,因为有点看不动题目。

标签:Node,const,int,838,Codeforces,cin,solve,last,Div
From: https://www.cnblogs.com/xyh-hnust666/p/16988807.html

相关文章

  • Educational Codeforces Round 140 D
    D.Playoff题链我们观察样例或者自己想一想就可以知道这个答案一定是一段连续的数字那么我们考虑如何确定这个答案的上下界即可而且只要给出的字符串s有一个0那么我......
  • CodeForces-300#B 题解
    题意给定\(n\)个数,保证\(n\mid3\),要将这\(n\)个数分配到\(\dfrac{n}{3}\)个三元组,有\(m\)个要求\(a,b\),每个要求表示\(a,b\)要在同一个三元组里,求最后的分......
  • Codeforces Round 838 (Div. 2)
    B.MakeArrayGood题意:给定n个数,每次可以对其中一个数进行操作,其中,在操作数量不超过n的前提下,构造一种操作使得任意两个数中,大的数可以被小的数整除。分析:结论:所......
  • 「Editorial」Codeforces Contest 1149
    C.TreeGenerator™容易发现树上一条路径一定形如))...)((...(。也就是对于任意子段,去掉匹配了的括号后还剩下的部分。而这个东西还是不太好表示,我们有如下引理:这个值......
  • Codeforces Round #837 (Div. 2)
    A.HossamandCombinatorics(CF1771A)题目大意给定一个长度为\(n\)的数组\(a\),问有多少个数对其差的绝对值等于该数组的极差。解题思路若最大值和最小值相等,则答案......
  • div的使用
    div:盒子模型(块级元素)border:边框总写:border-color:边框颜色例:(顺时针顺序+对称原则)border-color:redblueyellowpink;分写:border-top-color:上边框颜色......
  • Codeforces Round #838 (Div. 2) D
    D.JourneytoUn'Goro题链考虑一个三元组内一定可以排除一个非0的xyz我们询问xz和yz要是gx==gy那么我们的z一定不是0否则gx=pxgy=py排除z要是gx!=gy那么......
  • Educational Codeforces Round 2
    EducationalCodeforcesRound2https://codeforces.com/contest/6003/6:ABDA.ExtractNumbers小模拟。把一个字符分成两部分输出,遇到';'或','视为单词分隔符,非负......
  • Codeforces Round #838 (Div. 2) D. GCD Queries
    题意有个长度为n的排列p,[0,1,2,...n-1],你可以进行至多2*n次询问,每次询问两个i,j,返回gcd(pi,pj),让你在规定时间内猜出0在哪两个位置之一思路这是一道交互题,询问的上限是2n......
  • Educational Codeforces Round 139 (Rated for Div. 2)
    EducationalCodeforcesRound139(RatedforDiv.2)数组开小,身败名裂场。CF1766AExtremelyRound直接前缀和递推预处理一下每个\(n\)的答案,询问直接输出即可。CF......