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

Codeforces Round #843 (Div. 2)

时间:2023-01-11 20:57:04浏览次数:41  
标签:字符 843 数字 int void cin Codeforces Div 题意

A - Gardener and the Capybaras

题意

给出字符串S,S只由字符a,b组成,问怎么切分可以使字符串分为小大小,大小大这种的三段。

思路

在2 ~ n - 1的范围内找到字符a的位置,如果里面有a,则将字符a的前半段为a串,a单独为b串,a后c串。此时只有一个a的b串一定是最小的。
如果在范围内未能找到a,则说明全是b,这样将第一个字符为a串,2 ~ n - 1为b串,最后一个字符为c串,此时b串一定是最大的。

void solve() {
	string s;
	cin >> s;
	int n = s.size(), id = -1;
	for (int i = 1; i < n - 1; i ++) {
		if (s[i] == 'a') {
			id = i;
			break;
		}
	}
	
	if (id != -1) {
		cout << s.substr(0, id) << ' ' << 'a' << ' ' << s.substr(id + 1) << endl;
	} else {
		cout << s[0] << ' ' << s.substr(1, n - 2) << ' ' << s[n - 1] << endl;
	}
}

\[\]

B - Gardener and the Array

题意

给出n个数字,每个数字给出二进制位上为1的下标。问这n个数字中是否存在两个子序列或和相等的情况

思路

其实就是找是否存在一个数字完全包括另一个数字,或者说整个集合除了某一个数字的或和包括了这个数字,若是则满足条件。
一开始用的bitset存二进制数字,re了。不明白怎么表示或和,后来发现只需要统计每个数字出现次数即可,若整个数字的二进制位都出现超过两次说明这个数字被别的数字包括

void solve() {
	int n;
	cin >> n;
	map<int, int> mp;
	vector<vector<int>> a(n + 1, vector<int>(0));
	for (int i = 1; i <= n; i ++) {
		int k;
		cin >> k;
		for (int j = 0; j < k; j ++) {
			int x;
			cin >> x;
			a[i].push_back(x);
			mp[x] ++;
		}
	}
	
	for (int i = 1; i <= n; i ++) {
		bool ok = 1;
		for (auto j : a[i]) {
			if (mp[j] < 2) {
				ok = 0;
				break;
			}
		}
		
		if (ok) {
			cout << "YES" << endl;
			return ;
		}
	}
	
	cout << "NO" <<endl;
}

\[\]

C - Interesting Sequence

题意

给出n,x。问是否有n & (n + 1) & (n + 2) & .... & m = x

思路

通过观察即可知道如果n < x 则不可能,等于x直接输出即可,大于x需要判断
手动模拟样例可知,若想让与和等于x,需要消去n上x不存在的二进制为1的数,通过lowbit操作每次找到n的最低位的1,然后模拟进位,若是n可以等于x,则输出,否则若n < x则判负

LL lowbit(LL x) {
	return x & -x;
}
 
//注意观察N的大小
void solve() {
	LL n, x;
	cin >> n >> x;
	if (n < x) {
		cout << -1 << endl;
	}else if (n == x) {
		cout << n << endl;
	}else {
		while (1) {
			LL ans = n + lowbit(n);
			n += lowbit(n);
			n -= lowbit(n);
			if (n == x) {
				cout << ans << endl;
				return ; 
			}
			if (n < x) {
				cout << -1 << endl;
				return ;
			}
		}
	}
}

标签:字符,843,数字,int,void,cin,Codeforces,Div,题意
From: https://www.cnblogs.com/lbzbk/p/17044866.html

相关文章

  • Codeforces Round #843 (Div. 2)
    题目链接Atag:构造,分类讨论核心思路我们其实可以发现我们要是分很多情况去讨论abc,这题就不好做。所以我们可以假设a和b就是我们字符串的两个端点,这样题目就很好做了......
  • Codeforces Round #843 (Div. 2) Problem C
    C.InterestingSequencetimelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutput  Petyaandhisfr......
  • Codeforces 1278 F Cards 增强版 题解 (斯特林数,推式子)
    原题链接增强版链接增强版中k=1e7为啥网上题解的式子都那么长啊.jpg首先令\(p=\frac1m\)。求某个数的次幂的题通常都是无脑转下降幂:\(x^k=\sum_{i=0}^kS_2(k,i)x^{\u......
  • Codeforces Round #823 (Div. 2)
    A.B.C.DCodeforcesRound#823(Div.2)A.Planets-签到题意题意是一些卫星在一些轨道上,操作1花费1摧毁一个卫星,操作2花费\(y\)摧毁一个轨道上的所有卫星,问摧......
  • 「Codeforces」寒假训练 2023 #4
    A.Coprime原题链接#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=2e5+10;intt,n,ans;map<int,int>mp;intgcd(intu,......
  • Educational Codeforces Round 1
    Problem-A-Codeforcesvoidsolve(){ios;intt;cin>>t;while(t--){intn;cin>>n;intsum=n*(n+......
  • 一个CF1775C(Codeforces Round #843 (Div. 2))的小技巧
    若\(n\)的第\(i\)位为\(1\),而我们需要不断令\(n+1\)找到下一个最小的\(k\),使得\(k\)的第\(i\)位为\(0\)。技巧:假设\(n\)为10101[1]1001,括号内是要求的第\(i\)位那么先......
  • CF Codeforces Round #843 (Div. 2)
    CodeforcesRound#843(Div.2)本次脑袋不大灵光,一方面可能是怕掉分。另一方面就是交的人实在是太少了,导致我一直不敢交,其实这场cf没有我想象中那么难,甚至来说我一直是......
  • CF843记录
    正序开题A直接做完整版,一开始读错题了以为是任意字符串,想出来之后回去看题,发现只有ab,写了140+行的分讨,20:00才过。B又读错题以为是异或,想了一会儿发现读错题了,水题......
  • Educational Codeforces Round 141
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1783。CF车队翻车咯,本来上大分,喜提skippedA如果所有数均相等则无解。否则先降序排序......