https://codeforces.com/problemset/problem/1361/C

从高到低位枚举,如果一个项链的答案是ans,那么根据题意等价于这些连接之间末位的ans个bits是相同的,把一对珍珠当一条边,连接末位的bits之间的连线,然后跑欧拉回路,记录边的顺序就行了

从标程里学习了递归的欧拉回路写法,方便记录边的序号,还学了新的输出姿势,涨姿势了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define fir first
#define sec second
typedef pair<int,int> p;
const int maxl=1<<20;int n,m,cas,k,cnt,tot,ansb;
int a[maxl][2],du[maxl],ans[maxl];
int s[maxl],cur[maxl];
bool in[maxl],vis[maxl];
vector <p> e[maxl];inline void prework()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&a[i][0],&a[i][1]);
} inline void dfs(int u)
{vis[u]=true;for(p d:e[u])if(!vis[d.fir])dfs(d.fir);
}inline bool jug(int mask)
{for(int i=0;i<=mask;i++)e[i].clear(),vis[i]=false;int u,v,len,cnt;for(int i=1;i<=n;i++){u=a[i][0]&mask;v=a[i][1]&mask;e[u].push_back({v,2*i+1});e[v].push_back({u,2*i});}cnt=0;for(int i=0;i<=mask;i++){len=e[i].size();if(len&1)return false;if(!vis[i] && len>0){if(cnt>0) return false;cnt++,dfs(i);}}return true;
}inline void eular(int u,int pre=-1)
{while(e[u].size()){p d=e[u].back();e[u].pop_back();if(in[d.sec/2])continue;in[d.sec/2]=true;eular(d.fir,d.sec);}if(pre!=-1){ans[++ans[0]]=pre;ans[++ans[0]]=pre^1;}
}inline void solv(int mask)
{int len,u,i;for(int st=0;st<=mask;st++){len=e[st].size();if(len>0){eular(st);return;}}
}inline void mainwork()
{for(int i=20;i>=0;i--)if(jug((1<<i)-1)){solv((1<<i)-1);ansb=i;return;}
}inline void print()
{printf("%d\n",ansb);for(int i=1;i<=2*n;i++)printf("%d%c",ans[i]-1," \n"[i==2*n]);
}int main()
{int t=1;//scanf("%d",&t);for(cas=1;cas<=t;cas++){prework();mainwork();print();}return 0;
}

codeforces1361C Johnny and Megan‘s Necklace相关推荐

  1. CF1361C. Johnny and Megan‘s Necklace(构造,欧拉回路,传递闭包)

    CF1361C. Johnny and Megan's Necklace Solution 真duliu,快做吐了... 刚开始想了一个假做法(但前面还是很真的). 假的做法大概是你发现这个东西具有传 ...

  2. codeforces:1361(div1)1362(div2):总结

    文章目录 前言 1362-A. Johnny and Ancient Computer 解析 1362-B - Johnny and His Hobbies 解析 1362-C - Johnny an ...

  3. 拆位 ---- C. Johnny and Another Rating Drop[位运算,计算每一位的贡献+推导过程]

    C. Johnny and Another Rating Drop 题目大意:就是定义一个不公平度就是相邻两个数的二进制位不相同数 比如说:100和011就是有3位不同 现在给你一个n∈[1,1e18 ...

  4. HDU 5727 Necklace

    题目:Necklace 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5727 题意:要用n个阳石和n个阴石来串一个项链(环状),规定阳石旁边只能是阴石,阴 ...

  5. Johnny and Another Rating Drop CodeForces - 1362C(规律)

    The last contest held on Johnny's favorite competitive programming platform has been received rather ...

  6. HDU 5730 Shell Necklace(生成函数 多项式求逆)

    Shell Necklace 由题意可得f[n]=∑i=1na[i]f[n−i]f[n] = \sum\limits_{i = 1} ^{n} a[i] f[n - i]f[n]=i=1∑n​a[i] ...

  7. E:Johnny and Grandmaster

    Johnny and Grandmaster 或许更好的阅读体验 思路 这道题就是把一组数分成两个集合,使这两个集合的对p的次方的和的差的最小值,也就是求sum1−sum2sum1 - sum2sum ...

  8. UVa10054 The Necklace 欧拉回路

    如果图G中的一个路径包括每个边恰好一次,则路径称为欧拉路径. 如果一个回路是欧拉路径,则称为欧拉回路.(即起点终点相同的欧拉路) 有欧拉回路的称为欧拉图,有欧拉路径但无欧拉回路的称为半欧拉图. 无向图 ...

  9. Happy Necklace

    happy necklace 题意:一个项链是由红蓝两个珠子构成,项链不是环,是一条线,要求每一个素数长度红色珠子的个数大于等于蓝色珠子的个数,给你n个珠子问符合条件的项链的个数. 思路:一看取模就知 ...

最新文章

  1. Redis的数据类型详解
  2. 【数学和算法】初识卡尔曼滤波器(二)
  3. web前端——transform变形 旋转角度正负的判断
  4. win7系统如何提高电脑运行速度
  5. mac npm command not found
  6. 分析“关于Linux内核引入的accept_local参数的一个问题”
  7. 全国计算机b类一级考试试题题库,全国计算机等级考试模拟题:一级B试题(一)...
  8. cad批量打印_CAD插件批量打印3.5.9
  9. JAVA毕业设计Web企业差旅在线管理系统计算机源码+lw文档+系统+调试部署+数据库
  10. 用matlab计算矩阵的权重,如何使用matlab计算加权平均分
  11. 日系插画学习笔记(十一):日系插画标准上色流程
  12. Android 电源键事件流程分析
  13. SIGIR'22 | 利用最小化互信息学习反事实推断中的解耦表征
  14. 黔南州委常委、统战部部长潘选一行领导莅临迦太利华调研
  15. R语言 | 编写自己的函数
  16. 淘系自研前端研发工具 AppWorks 正式发布
  17. excel单元格内容拆分_Excel中把一个单元格内容拆分到多个单元格内的两种方法...
  18. 如何更改mysql数据库的用户名和密码
  19. 实用软件测试技术与持续质量改进方法 培训课程
  20. c语言函数指针封装函数,C语言之函数指针、回调函数的使用

热门文章

  1. 中兴新支点操作系统加入腾讯发起的OpenCloudOS开源社区:希望百花齐放
  2. 亚马逊商品销售数据爬虫分析报告
  3. 生产无线充线圈要选好设备
  4. GBase 8s V8.9 安全管理器 用户手册-1
  5. java毕业设计家校通管理系统(附源码、数据库)
  6. python操作字典
  7. apache poi Maven依赖
  8. 紧致卷积网络设计——Shift卷积算子
  9. ospf协议HCIA级别知识点
  10. 《现代汉语》语音概论