CF1922E Increasing Subsequences 题解
解题思路
因为可以有空集,那么我们首先构造第一段最长的连续上升的序列,那么这段序列中共有 -1
。
AC 代码
#include<stdio.h>
#include<stdlib.h>
#define ll long long
#define N 205
ll x;int a[N];
int _2[N];
inline void work(){
scanf("%lld",&x);
int ce=0;ll y=x;
while(y){
_2[++ce]=y&1;
y>>=1;
}
for(register int i=1;i<ce;++i)
a[i]=i;int n=ce-1;
x-=1ll*(1ll<<(ce-1));
int now=ce-1;
while(x>0){
while(x<(1ll<<(now-1))&&now>0)
--now;
if(now==0) break;
while(x>=(1ll<<(now-1))&&now>0)
a[++n]=now,x-=(1ll<<(now-1));
}if(x){
puts("-1");
return;
}printf("%d\n",n);
for(register int i=1;i<=n;++i)
printf("%d ",a[i]);
putchar('\n');
}
signed main(){
int T;scanf("%d",&T);
while(T--) work();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示