首页 > 其他分享 >AT_agc062_c [AGC062C] Mex of Subset Sum 思维妙妙题--zhengjun

AT_agc062_c [AGC062C] Mex of Subset Sum 思维妙妙题--zhengjun

时间:2023-07-11 20:36:01浏览次数:32  
标签:Subset ll cup -- Sum cap int sum

思路比较巧妙。

首先排序。

考虑目前维护出 \(a_{1 \sim i}\) 不能表示的数的集合 \(S\)。

考虑如何加入 \(a_{i+1}\)。

如果当前 \(<a_i\) 的数足够了,直接输出(因为这些数将会一直留在 \(S\) 中)。

记 \(sum=\sum\limits_{j=1}^{i}a_j\)。

\(a_{i+1}>sum\)

\[S'=S\cup [sum+1,a_{i+1}-1] \cup \{x+a_{i+1}|x\in S\} \]

  • 若 \(|S\cup [sum+1,a_{i+1}-1]|\ge k\),则直接输出了。

  • 若 \(|S\cup [sum+1,a_{i+1}-1]|< k\)

    • \[|\{x+a_{i+1}|x\in S\}|=|S| \]

    • \[\Longrightarrow |S'|<|S|+k \]

\(a_{i+1}\le sum\)

\[S'=(S\cap [1,a_{i+1}-1])\cup\{x+a_{i+1}|x\in S \and (x+a_{i+1}\in S\or x+a_{i+1}>sum)\} \]

  • 若 \(|S\cap [1,a_{i+1}-1]|\ge k\),直接输出。

  • 若 \(|S\cap [1,a_{i+1}-1]|<k\)

    • \[|\{x+a_{i+1}|x\in S \and (x+a_{i+1}\in S\or x+a_{i+1}>sum)\}|\le |S| \]

    • \[\Longrightarrow |S'| < |S|+k \]

最后一步

所以每次增加的个数 \(<k\),总个数在 \(O(nk)\) 级别。

所以复杂度可以做到 \(O(nk\log(nk))\)。

代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=65;
const ll INF=1e18;
int n,m;
ll a[N];
set<ll>S,T;
void print(){
	if((int)S.size()<m)return;
	for(ll x:S){
		cout<<x<<"\n "[--m>0];
		if(!m)break;
	}
	exit(0);
}
int main(){
	freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+1+n),a[++n]=INF;
	ll sum=0;
	for(int i=1;i<=n;i++){
		if(a[i]<=sum){
			S.swap(T),S.clear();
			for(ll x:T){
				if(x<a[i])S.insert(x);
				print();
			}
			for(ll x:T){
				if(x+a[i]>sum||T.count(x+a[i]))S.insert(x+a[i]);
			}
		}else{
			S.swap(T),S=T;
			for(ll j=sum+1;j<a[i];j++){
				S.insert(j);
				print();
			}
			for(ll x:T)S.insert(x+a[i]);
		}
		sum+=a[i];
	}
	return 0;
}

标签:Subset,ll,cup,--,Sum,cap,int,sum
From: https://www.cnblogs.com/A-zjzj/p/17545821.html

相关文章

  • VoxPoser:机器人接入大模型听懂人话
    李飞飞团队具身智能最新成果来了:大模型接入机器人,把复杂指令转化成具体行动规划,无需额外数据和训练。从此,人类可以很随意地用自然语言给机器人下达指令,如:打开上面的抽屉,小心花瓶!大语言模型+视觉语言模型就能从3D空间中分析出目标和需要绕过的障碍,帮助机器人做行动规划。......
  • 解决西部数据 C1 门,磁头频繁归位
    目前在用的AllinOneNAS上面挂了一块远古时期的2.5寸西数500G蓝盘存数据,我自己都不记得这款硬盘是哪里来的,也许是之前的笔记本电脑里拆下来的N手盘。不过好在它还蛮争气,连续服役这么多年依旧没有坏道。硬盘在平时经常出现"啧啧"的磁头归位声,隔几分钟就有一次,一开始以......
  • 二项式定理和杨辉三角
     杨辉三角解法1:dfs使用记忆化搜索,提升dfs效率代码:intdfs(intn,intm){ if(!m)returnc[n][m]=1; if(m==1)returnc[n][m]=n; if(c[n][m])returnc[n][m]; if(n-m<m)m=n-m; returnc[n][m]=(dfs(n-1,m)+dfs(n-1,m-1))%mod;}解法2:递推时间复杂度O(n^2),如果......
  • jdk1.8新特性
    1.default关键字在jdk8之前,接口里面只能包含抽象方法,但是jdk8之后,允许使用default修饰的默认方法。publicinterfaceNewCharacter{publicvoidtest1();publicdefaultvoidtest2(){System.out.println("我是新特性1");}}default作用......
  • 通达信金融终端解锁Level-2功能 续二 (非法调试 I say NO)
    图一:1. 破解后的逐笔分析可以不受条件正常运行。2. 打开调试,被防止非法调试代码阻拦。3. 只好关闭调试。4.立马spell符文"ShipSheep,CheapChips,ShiftShit,BullRed"5. 再次打开调试,受到符文回路解放,调试白给。    图二:1. 白给调试后,重新刷新页面2.......
  • AtCoder Beginner Contest 309 G Ban Permutation
    洛谷传送门AtCoder传送门前置知识:[ARC132C]AlmostSorted看\(\geX\)不顺眼,怎么办呢!直接容斥!钦定\(j\)个位置满足\(|P_i-i|<X\),其余任意,就转化成了[ARC132C]AlmostSorted。具体一点就是,你设\(f_{i,j,S}\)表示前\(i\)位有\(j\)个位置满足\(|P_i-i|<......
  • 我们与高效工作流的距离:使用AI阅读工具ChatDOC+笔记软件Obsidian Slide,直接从 PDF 文
    我们与高效工作流的距离在当今信息化的时代,为了实现高效工作和学习,如何实现快速地输入和输出成为每个人的必修课题。然而,对于输入而言,每一天大量的信息,往往会使我们陷入信息过载和知识爆炸的困境,难以高效处理。与此同时,输出方面的问题也同样令人头痛。对于多数人而言,PPT是主流......
  • 【做题笔记】线性dp——线段树优化
    线段树优化是用来对于\(DP\)数组区间赋值的。主要是区间取最值来优化线性dp真没什么可写的了挂两个题目:P4644[USACO05DEC]CleaningShiftsSP1545[USACO04DEC]DividingthePathGUSACO的小清新线段树优化dp好题......
  • 这是我的第一篇博客
    我的第一篇博客介绍一下自己​普通的计算机学生一枚,长期在网上搜罗各种博客以充实实验报告(捂脸)。现在正式开了一个自己的博客,分享一些自己遇到的问题和解决的过程,同时也会对自己接触到一些有趣的项目进行介绍。​自己很菜很菜,必然存在各种错误,如果有幸某篇博客被......
  • Pika Labs:文生视频AI
    最近又一个文生视频AI火了。话不多说,直接上效果!若不说是AI生成的,或许很多朋友都会误以为是《小黄人》又出预告片了吧~而且这一次,文生视频不再是短短的几秒钟,是直接可以出广告片的那种了。例如一段有关Pizza的广告是这样的:画面充斥着警笛、救护等素,结果主人公却是个Pizza,这......