首页 > 其他分享 >题解:CF722D Generating Sets

题解:CF722D Generating Sets

时间:2024-10-25 11:25:23浏览次数:7  
标签:Generating ch return int 题解 CF722D while mod define

涉及知识点:set

解题思路

每次让列表中最大的元素缩小两倍,保证答案最优。

如果当前的元素缩小成 $0$ 就直接跳出循环,输出这个序列。

由于序列需要支持插入、删除以及找最大值,所以这个序列可以用 set 来维护。

代码

#include <bits/stdc++.h>
#define int long long
#define ll __int128
#define db double
#define ldb long double
#define vo void
#define endl '\n'
#define il inline
#define re register
#define ve vector
#define p_q priority_queue
#define PII pair<int, int>
using namespace std;

//#define O2 1
#ifdef O2
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3, "Ofast", "inline")
#endif

namespace OI {
	template <typename T>
	il T read() {
		T x = 0, f = 1;
		int ch = getchar();
		while (!isdigit(ch)) {
			if (ch == '-') f = -1;
			ch = getchar();
		}
		while (isdigit(ch)) {
			x = (x << 3) + (x << 1) + (ch ^ 48);
			ch = getchar();
		}
		return x * f;
	}
	template <typename TE>
	il void write(TE x) {
		if (x < 0) {
			x = -x;
			putchar('-');
		}
		TE sta[35];
		int top = 0;
		do {
			sta[top++] = x % 10, x /= 10;
		} while (x);
		while (top) putchar(sta[--top] + '0');
	}
	il string read_with_string() {
		string s = "";
		char ch = getchar();
		while ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9')) {
			s += ch;
			ch = getchar();
		}
		return s;
	}
	il void write_with_string(string s) {
		for (int i = 0; i < s.size(); i ++ ) putchar(s[i]);
	}
}
namespace COMB {
	int fact[200000];
	int Triangle[1010][1010];
	void Fact(int n, int mod) {
		fact[0] = 1;
		for (int i = 1; i <= n; i ++ ) fact[i] = ((fact[i - 1]) % mod * (i % mod)) % mod;
	}
	void Pascal_s_triangle(int n, int mod) {
		for (int i = 0; i <= n; i ++ ) Triangle[i][0] = 1;
		for (int i = 1; i <= n; i ++ )
			for (int j = 1; j <= i; j ++ )
				Triangle[i][j] = (Triangle[i - 1][j] + Triangle[i - 1][j - 1]) % mod;
	}
	int pw(int x, int y, int mod) {
		int res = 1;
		while (y) {
			if (y & 1) res = ((res % mod) * (x % mod)) % mod;
			x = (x % mod) * (x % mod) % mod;
			y >>= 1;
		}
		return res;
	}
	int pw(int x, int y) {
		int res = 1;
		while (y) {
			if (y & 1) res *= x;
			x *= x;
			y >>= 1;
		}
	}
	int GCD(int x, int y, int mod) {
		return __gcd(x, y) % mod;
	}
	int LCM(int x, int y, int mod) {
		return (((x % mod) * (y % mod)) % mod / (GCD(x, y, mod) % mod)) % mod;
	}
	int C(int n, int m, int mod) {
		if (m > n || m < 0) return 0;
		return fact[n] * pw(fact[m], mod - 2, mod) % mod * pw(fact[n - m], mod - 2, mod) % mod;
	}
	int Ask_triangle(int x, int y) {
		return Triangle[x][y];
	}
}
using namespace OI;
using namespace COMB;

//#define fre 1
#define IOS 1
//#define multitest 1

const int N = 2e5 + 10;
const int M = 4e5 + 10;
const int inf = 1e12;

int n;
int a[N];
set<int> s;

il void Init() {
	cin >> n;
	for (int i = 1; i <= n; i ++ ) cin >> a[i];
}

il void Solve() {
	for (int i = 1; i <= n; i ++ ) s.insert(a[i]);
	while (1) {
		int x = *(--s.end());
		int old = x;
		while (x && s.count(x)) x >>= 1;
		if (!x) break;
		s.erase(old);
		s.insert(x);
	}
	while (!s.empty()) {
		cout << *(--s.end()) << " ";
		s.erase(--s.end());
	}
}

signed main() {
	int T;
#ifdef IOS
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#endif
#ifdef fre
	freopen(".in", "r", stdin);
	freopen(".out", "w", stdout);
#endif
#ifdef multitest
	cin >> T;
#else
	T = 1;
#endif
	while (T--) {
		Init();
		Solve();
	}
	return 0;
}
/*

*/

标签:Generating,ch,return,int,题解,CF722D,while,mod,define
From: https://www.cnblogs.com/zla2012/p/18502118

相关文章

  • 题解:P10298 [CCC 2024 S4] Painting Roads
    涉及知识点:图的遍历。我们观察样例可以发现,染色之后的图是一颗树,而且还是dfs树。题目要求所以路径上的颜色都是交替的,所以直接交替染色即可。注意:建图的时候需要记录当前边的编号。代码#include<bits/stdc++.h>#defineintlonglong#definell__int128#definedbd......
  • 题解:SP25334 NPC2015A - Eefun Guessing Words
    涉及知识点:字符串处理。解题思路记录每个字符出现的第$1$个位置和最后$1$个位置,询问时比较大小即可。代码#include<bits/stdc++.h>//#defineintlonglong#definell__int128#definedbdouble#defineldblongdouble#definevovoid#defineendl'\n'#defin......
  • 题解:CF1988B Make Majority
    题目大意题面写得很清楚,我就不再赘述了。解题思路涉及知识点:字符串,构造。由于所有相邻的$0$合并完会变成一个$0$,所以先贪心地把所有挨在一起的$0$合并起来,放在一个新的字符串里。而且题目需要你判断是否最终是否能合并成一个$1$,所以$1$是不需要想$0$一样合并的,这......
  • 题解:CF1994B Fun Game
    涉及知识点:异或,字符串处理。解题思路‌异或是一种二进制运算,用于比较两个数字的差异。当两个输入不同时,异或运算的结果为1;当两个输入相同时,结果为0。现在就可以切掉本题了。设两个字符串分别为$a$,$b$。如果$a$和$b$完全相同,输出Yes。如果$a$中没有$1$且$b$......
  • 题解:CF633D Fibonacci-ish
    涉及知识点:枚举,STL。题目大意给你一个序列,让你选出一些元素,使其构成fibonacccccci数列,求数列的最大长度。解题思路定义一个桶,$mp_i$代表$i$这个数在输入序列当中出现的次数。由于$n\le1000$,所以可以直接暴力枚举fibonacccccci数列的前两个数。前两个数固定了,这......
  • vue 项目history模式刷新404问题解决办法
    前言vue项目history模式部署到服务器后,根路径访问没有问题,但是进入其他功能再刷新页面就会出现404,因为你没在nginx或者apache配置上面加上重定向跳转。解决办法,只需要加上这段配置:nginx配置内容:location/{try_files$uri$uri/@router;indexindex.html;}lo......
  • 蓝桥杯大赛 ——首场算法团队战题解
    1. 不同角度【算法赛】在生活中,我们总是根据数值的大小来判断两个数字的大小关系。例如,9999 总是小于 100100,999999 总是小于 10001000。但如果我们换一个角度,将 999999 和 10001000 看成是两个数字字符串,并用字典序来比较它们的大小,那么此时,999999 将大于 10001000。......
  • [题解]P4552 [Poetize6] IncDec Sequence
    P4552[Poetize6]IncDecSequence我们对\(a\)做差分,得到数组\(b\)。\(a\)的区间修改,等价于选定\(i,j\in[1,n+1]\),令\(b[i]\leftarrow(b[i]+1),b[j]\leftarrow(b[j]-1)\),我们的目标是让\(b[2\simn]\)全为\(0\)。记\(x,y\)分别表示\(b[2\simn]\)中正数之和、负数的绝对值之和......
  • [Coci2011]kamion 题解
    前言题目链接:Hydro&bzoj;黑暗爆炸。题意简述给你一张\(n\)个点\(m\)条边的有向图。有\(p\)种括号,每条边的边权可以是这\(p\)种括号中某一种的左括号或者右括号,也可以为空。问你有多少条从\(1\)开始到\(n\)的长度小于等于\(k\)的路径,满足括号匹配,或者剩余若干未......
  • 题解:P3012 [USACO11FEB] Cowlphabet G
    [USACO11FEB]CowlphabetG题意有\(P\)种拼接方式,问由\(U\)个大写字母和\(L\)个小写字母合法组合的方案数。输出方案数对\(97654321\)取模的值。思路动态规划,还没有人写逆推方法,刚好我做的逆推。设\(f[i][j][z]\)表示一共有\(i\)个字母,其中\(j\)个为小写字母,......