首页 > 其他分享 >CF1988C. Increasing Sequence with Fixed OR

CF1988C. Increasing Sequence with Fixed OR

时间:2024-10-12 21:20:08浏览次数:3  
标签:Increasing const 高位 int CF1988C 二进制 消掉 -- Fixed

链接:

       https://codeforces.com/problemset/problem/1988/Cicon-default.png?t=O83Ahttps://codeforces.com/problemset/problem/1988/C

大意:

        给定一个n,找一个最长的正整数递增序列,并满足相邻或等于n

思路:

        1、显然是要分析二进制方面的规律

        2、首先a_i肯定是在n的二进制里有1的部分变零得到的,要不然或一下就不会是n,所以我们就要对n的每一位分析a_i有没有

        3、对n的某位分析:

        4、a_i对应位是1的情况没什么特别的,左右都没有限制

        5、a_i对应位是0的时候,a_{i+1}a_{i - 1}都只能取1,那么,为了维持递增,a_i上肯定有更高位为1而a_{i - 1}为0的情况,此时a_{i - 2}在这个高位上只能取1,而a_{i - 1}肯定也有更更高位为1,如果a_i在这个位为0,那刚刚的a_i > a_{i - 1}的论断就没啥意义了,所以这个更更高位上a_i是1

        6、那么我们从后往前想的话,最后一个肯定是n,倒数第二个就是最高的1消掉,倒数第三个是次高的1消掉,以此类推

        7、那么找出n的二进制1的个数,答案加一即可,最后需要注意的是,1的个数为1的时候消去一个就变成0了,不符合题目要求的正整数,所以这种情况答案就是一个

代码:


#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10, INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
 
void solve()
{
	int n;
	cin >> n;
	vector<int> v;
	for (int i = 63; i >= 0; i--)
		if (n >> i & 1LL)v.push_back(n - (1LL << i));
	if (v.size() == 1)cout << 1LL << endl << n << endl;
	else
	{
		cout << v.size() + 1 << endl;
		for (int i = 0; i < v.size(); i++)
			cout << v[i] << " ";
		cout << n << endl;
	}
}
 
signed main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t = 1;
	cin >> t;
	while (t--) solve();
 
	return 0;
}

标签:Increasing,const,高位,int,CF1988C,二进制,消掉,--,Fixed
From: https://blog.csdn.net/weixin_47774773/article/details/142882811

相关文章

  • ABC292G Count Strictly Increasing Sequences [区间DP]
    Description你有\(n\)个数,每个数长度为\(m\)。不过这\(n\)个数中,可能有某些位不确定,需要你在每个?位置上\(0\)到\(9\)之间填一个数。设你填出来的序列是\(\{S_i\}\)。请你求出,在所有可能的填数方案中,有多少种满足\(S_1<S_2<\dots<S_n\)?对\(998244353\)取......
  • JavaScript Number研究03_实例方法_toExponential_toFixed_toPrecision_toString_valu
    JavaScriptNumber研究03:实例方法——toExponential、toFixed、toPrecision、toString、valueOf、toLocaleString在JavaScript中,Number对象不仅包含了许多有用的静态属性,还提供了一系列实例方法,帮助我们在不同场景下处理和转换数值。这些方法包括:toExponential()toFixed()......
  • CF946G Almost Increasing Array 题解
    题目传送门前置知识最长不下降子序列|权值树状数组及应用解法若将\(\{a\}\)变成严格递增序列,至少需要更改\(n\)减去\(\{a_{i}-i\}\)的最长不下降子序列长度个数。证明对于\(a_{i},a_{j}(i<j)\)若都在最终的严格递增序列里,则有\(a_{i}-a_{j}\lei-j\),即\(......
  • 《如 何 速 通 一 套 题》5.1bug fixed
    好吧,那天晚上才发现数据错了,只能咕一下了,现在咕完了前情提要:5.0D补幺梨\(1\lem\le10^8\),\(1\len\le10^7\),一看就不是背包。那么,以背包的形式出现,但是不是背包,还能是什么呢?同余最短路。只能是同余最短路。然后由于\(n\)太大了,所以不同的值的数量估计不会很多,最大......
  • [ARC122E] Increasing LCMs 题解
    感觉像比较套路的构造题。思路假如我们正着进行构造,可以发现我们加入一个数以后,对后面的数产生的影响是很大的。但是如果我们从最后一个数开始构造,那么可以发现它是不会对之后的构造产生任何影响的。应为越前面的数的限制会越少,那么可以填的数一定是不减的。一个数可以填在后......
  • C#——fixed用法
    1.fixed语句*固定用于指针操作的变量;*可防止垃圾回收器重新定位可移动变量,并声明指向该变量的指针;*固定变量的地址,在语句的持续时间内不会更改*fixed语句中,只能使用声明的指针,声明的指针是只读的,无法修改*fixed语句只能在不安全的上下文中使用staticvoidMain(str......
  • CF1621G Weighted Increasing Subsequences 题解
    题目链接点击打开链接题目解法这种题就感觉每一步都不难想,但串在一起就不会显然考虑位置\(x\)作为\(lis\)的一部分,合法的\(lis\)的个数合法的约束是:令\(lis\)的最后一个位置为\(last\),满足\(\max\{a_{last+1},...,a_n\}>a_x\)不难发现,合法的\(last\)是一段区间......
  • IPKISS 绘制 Euler Fixed Bend 的创建方法
    IPKISS绘制EulerFixedBend的创建方法正文正文在IPKISS使用Si_fabPDK创建EulerBend波导结构并导入Lumerical中产生对应仿真结构一文中我们介绍了如何使用IPKISS中的si_fab包创建EulerBend波导。这里我们介绍如何使用si_fab包创建EulerF......
  • 关于fixed 修改z-index无效,定位relative 将fixed覆盖问题
    https://img2024.cnblogs.com/blog/3388853/202408/3388853-20240812183846280-1202542483.png主要原因:观察z-index文档由于定位盒子受层叠上下文-CSS:层叠样式表|MDN(mozilla.org)影响。解决方法:发现.header为fixed定位,使得与下方input定位relative在同一级,都......
  • CF568E Longest Increasing Subsequence 题解
    Description给定一个长度为\(n\)的有\(k\)个空缺的序列。你有\(m\)个数可以用于填补空缺。要求最大化最长上升子序列的长度。\(n,m\le10^5\),\(k\le10^3\)。Solution容易发现只需要先构造出LIS上的位置的值,对于其余未填位置随便填,所以构造LIS时就不需要考虑出......