CF1966D Missing Subsequence Sum 题解

题意:给定 \(n(n \le 10^6)\)\(k(k \le n)\)。构造一个长度小于等于 \(25\) 的序列 \(a\) 满足:
1. 不存在一个子序列的和为 \(k\)
2. 对于 \(1 \le i \le n,i \ne k\),存在一个子序列的和为 \(i\)

看到长度为 \(25\),首先肯定会想到二进制。那么我们先构造出一个序列 \([2^0,2^1,\dots,2^{19}]\),会发现这样一定可以表示出所有 \(1\)\(n\) 的数。但是要求不能表示出 \(k\),所以我们把 \(2^p\) 删掉,其中 \(p\)\(k\) 的最高位,这样就一定表示不出 \(k\) 了。

删掉之后会出现一个问题,除了 \(k\) 之外第 \(p\) 位为 \(1\) 的数也不能表示出来了,考虑如何解决。

一个结论是:再加上 \(k-2^p,k+1,k+1+2^p\) 这三个数,最终的序列一定合法。

\(\text{Prove}\)

  • \(1 \le i \le k-2_p\)
    因为 \(k - 2_p \le 2^{p}-1\),所以直接用 \([2^0,2^1,\dots,2^{p-1}]\) 表示即可。
  • \(k-2^{p} < i \le k-1\)
    先将 \(i\) 减去 \(k-2^{p}\),因为 \(i-(k-2_p) \le 2^{p}-1\),所以剩下的直接用 \([2^0,2^1,\dots,2^{p-1}]\) 表示即可。
  • \(i=k\)
    所有小于等于 \(k\) 的数的和才 \(k-1\),显然表示不出 \(k\)
  • \(k+1 \le i \le n\)
    先将 \(i\) 减去 \(k+1\),如果减完之后 \(i\) 的第 \(p\) 位是 \(1\) 的话就改为减 \(k+1+2^p\)。这样减完之后的 \(i\) 的第 \(p\) 位一定为 \(0\),所以一定能表示出来。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T,n,k,ans[100];
signed main() {
	cin >> T;
	while(T--) {
		cin >> n >> k;
		int p = __lg(k),tot = 0;
		for(int i = 0;i <= 19;i++)
			if(i != p) ans[++tot] = (1ll << i);
		ans[++tot] = k - (1ll << p);
		ans[++tot] = k + 1;
		ans[++tot] = k + 1 + (1ll << p);
		cout << tot << endl;
		for(int i = 1;i <= tot;i++) 
			cout << ans[i] << " ";
		cout << endl; 
	}
	return 0;
}
posted @ 2024-04-28 12:02  Creeper_l  阅读(172)  评论(0编辑  收藏  举报
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
  3. 3 True love tired
  4. 4 一笑江湖 (DJ弹鼓版) 闻人听書_
  5. 5 最好的安排 曲婉婷
  6. 6 星星在唱歌 司南
  7. 7 山川 李荣浩
  8. 8 On My Way Alan Walker
  9. 9 百战成诗 王者荣耀·100英雄官方群像献礼歌
  10. 10 雪 Distance Capper / 罗言
  11. 11 Edamame bbno$ / Rich Brian
  12. 12 半生雪 七叔-叶泽浩
  13. 13 Catch My Breath Kelly Clarkson
  14. 14 Love Is Gone SLANDER / Dylan Matthew
  15. 15 Endless Summer Alan Walker / Zak Abel
  16. 16 悬溺 葛东琪
  17. 17 风吹丹顶鹤 葛东琪
  18. 18 Normal No More TYSM
  19. 19 哪里都是你 队长
  20. 20 Stronger Kelly Clarkson
  21. 21 廖俊涛
  22. 22 消愁 毛不易
  23. 23 The Runner Yubik
  24. 24 踏山河 七叔-叶泽浩
  25. 25 Waiting For Love Avicii
  26. 26 在你的身边 盛哲
  27. 27 Dream It Possible Delacey
  28. 28 凄美地 郭顶
  29. 29 满天星辰不及你 ycc
  30. 30 侧脸 于果
  31. 31 阿拉斯加海湾 蓝心羽
  32. 32 虞兮叹 闻人听書_
  33. 33 离别开出花 就是南方凯
  34. 34 盗墓笔记·十年人间 李常超 (Lao乾妈)
Normal No More - TYSM
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.