当前位置: 首页 > news >正文

益阳网站建设益阳网站开发视频下载

益阳网站建设益阳,网站开发视频下载,做网站容易还是app容易,110平米三室一厅简装图片题意 爱莉给了你一个非负整数 nnn,你需要把 0,1,2,…,n0, 1, 2, \dots, n0,1,2,…,n 划分成若干组,满足每一组的按位与为 000。 划分的组不需要相邻。 你需要最大化划分组数并给出方案。 1≤T≤6001 \le T \le 6001≤T≤600,0≤n≤1050 \le n…

题意

爱莉给了你一个非负整数 nnn,你需要把 0,1,2,…,n0, 1, 2, \dots, n0,1,2,,n 划分成若干组,满足每一组的按位与为 000

划分的组不需要相邻。

你需要最大化划分组数并给出方案。

1≤T≤6001 \le T \le 6001T6000≤n≤1050 \le n \le 10^50n105,保证单个测试点内 nnn 的和不超过 2×1052 \times 10^52×105

思路

闲着没事去看了两眼,题目越简洁,看着越吓人,做法越要思考。实在没想到这个只有黄的 T3,不过挺好玩的。

打表样例可见,每一组似乎都不超过 2 个。不妨就构造两个两个一组的答案,可能会多出一个 000,理论上可以得到 ⌈n+12⌉\left \lceil \dfrac{n+1}{2} \right \rceil2n+1 组。

考虑怎么样得到两个数与起来为 000,需要二进制每一位要么相反要么均为 000

假若有一个数 2x=(100...000)22^x=(100...000)_22x=(100...000)2,其中 000xxx 个,另一个数 2x−1=(11...111)22^x-1=(11...111)_22x1=(11...111)2,其中 111 也有 xxx 个;这二者与起来为 000,而若前者一直 +1+1+1,后者一直 −1-11,两个数按位与起来总是为 000。为什么呢?每次 +1+1+1 或者 −1-11,要么只改变末尾,要么发生进位改变高位——进位可能改变连续的高位。但是各位在初始状态总是相反,所以两个数同时改变各位依旧相反。

那么可以这样构造:找到小于 nnn 的最大 2x2^x2x,将 n∼2xn\sim 2^xn2x 加进队列,然后从 2x2^x2x2x−12^x-12x1 依次向大和向小枚举配对;设后者配对到 pospospos,当前者配对到 nnn 就停下,然后向队列中增补 2x−1∼pos−12^{x-1}\sim pos-12x1pos1,下一轮继续遍历到 pos−1pos-1pos1 ……——如果还没配对到 nnnpospospos 就到了 2x−12^{x-1}2x1 怎么办?此时 2x−1>pos−12^{x-1}>pos-12x1>pos1,可以直接忽略进队列的操作,继续把队列里剩下的元素配对玩再说,根据上面的结论来看这时可行的。

最后看队列有没有剩下的,如果 nnn 为奇数队列中将会剩下一个,此时让其和 000 配对;否则 000 自成一组。

讲得有点口胡了。具体细节见代码。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll T,n;
ll p2[22];
void init()
{p2[0]=1;for(int i=1;i<=20;i++)p2[i]=p2[i-1]*2;
}
queue<ll>q;
void clean()
{while(!q.empty())q.pop();
}
int main()
{scanf("%lld",&T);init();while(T--){clean();scanf("%lld",&n);if(n==0){puts("1");puts("1 0");continue;}printf("%lld\n",(n+2)/2);ll x=upper_bound(p2+1,p2+21,n)-p2-1;for(int i=p2[x];i<=n;i++)q.push(i);for(int i=x-1;i>=0;i--){ll pos=p2[i+1]-1;while(!q.empty()&&pos>=p2[i]){printf("2 %lld %lld\n",pos,q.front());pos--;q.pop();}for(int j=p2[i];j<=pos;j++)q.push(j);}if(!q.empty())printf("2 0 %lld\n",q.front());else puts("1 0");}return 0;
}
http://www.dtcms.com/a/475762.html

相关文章:

  • 网站的稳定性自己怎么做网站的聚合页面
  • wordpress网站发布wordpress模版mx
  • 如何选择做网站架设网站 自己购买服务器
  • 镇江网站建设流程网页效果图设计教程
  • 广州网站建设广州网络推广公司排名济南房地产网
  • sogo提交网站入口如何利用网络进行推广和宣传
  • 北京做手机网站揭阳企业建站系统
  • 长春公司网站推广项目管理流程
  • 深圳网站建设服务哪家专业app营销策略有哪些
  • 龙岗网站建做网站的商家怎么后去流量费
  • 电视台网站模版凡科二级网站怎么做
  • 阿里云里面网站建设外贸人才网招聘
  • 如何制作手机免费网站模板网站前端设计公司
  • 企业网站优化怎么做手机模板制作
  • 做网站备案 空间是什么意思软件开发项目管理工具
  • 顺德大良那里做网站好泰州品牌网站建设
  • django做的网站有哪些昆山网站制作公司
  • 域名解析平台网站建设淘宝做网站的多少钱
  • 网站内容建设是什么合肥滨湖建设指挥部网站
  • 相亲网站界面设计做箱包外贸哪个网站好
  • 保定网站开发公司淮北市建设工程信息网
  • 沈阳网站建设渠道wordpress 耗内存
  • 【Android】Activity 的生命周期和启动模式
  • 网站开发设计方案书网站的搜索功能怎么做
  • 浙江省住房与城乡建设厅网站建设网站基础知识
  • 中国高清adidas网站如何自己申请商标注册
  • 有哪些做拎包入住的网站零基础jsp网站开发
  • CF1515E Phoenix and ComputersAC代码+详细注释
  • 相亲网站建设关键网站上传用什么软件做视频教程
  • 免费中学网站模板wordpress邀请有奖