Wannafly Camp 2020 Day 2H 叁佰爱抠的序列 - 欧拉遍历
2024-09-03 03:18:50
转化为完全图的欧拉遍历
如果 n 是奇数,则欧拉遍历长度为 \(n(n-1)/2\) 条边
如果 n 是偶数,则欧拉遍历长度为 \(n*n/2-1\) 条边
(即将(n-1)/2对点配对,剩下的一对当起点终点)
点数则 +1
答案是单调的所以二分
至于输出,暴力跑欧拉回路即可
眼瞎不开ll
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
const int N = 4005;
vector <pair<int,int> > g[N];
int vis[N*N],ind;
vector <int> sta;
void make(int p,int q,int r) {
g[p].push_back(make_pair(q,r));
g[q].push_back(make_pair(p,r));
}
void dfs(int p) {
for(pair<int,int> pr:g[p]) {
int q=pr.first, w=pr.second;
if(!vis[w]) {
vis[w]=1;
dfs(q);
}
}
sta.push_back(p);
}
signed main() {
cin>>n;
int l=1,r=3ll*sqrt(n)+1; //!!!
while(l<r) {
int mid=(l+r)/2,tmp=0;
if(mid&1) tmp=mid*(mid-1)/2+1;
else tmp=mid*mid/2;
if(tmp>n) r=mid;
else l=mid+1;
}
m=l-1;
printf("%lld\n",m);
if(n>2000000) return 0;
for(int i=1;i<=m;i++) {
for(int j=1;j<i;j++) {
make(i,j,++ind);
}
}
if(m%2==0) {
for(int i=3;i<=m;i+=2) {
make(i,i+1,++ind);
}
}
dfs(1);
for(int i=0;i<sta.size();i++) {
printf("%lld%s",sta[i],i==n-1?"":" ");
}
for(int i=sta.size();i<n;i++) printf("1%s",i==n-1?"":" ");
puts("");
}
最新文章
- .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译
- 北美IT公司大致分档
- XsltListViewWebPart 和自定义列表视图
- ubuntu下mysqli_connect()显示未定义,mysqli_fetch_all()显示未定义 解决方法
- phpcmsv9如何实现添加栏目时不在首页内容区显示只在导航栏显示
- 黄聪:mysql 存在该记录则更新,不存在则插入记录的sql
- getpeername
- centos 7.x编写开机启动服务
- My.Ioc 代码示例——Lifetime 和 ILifetimeScope
- WifiDog and OpenWrt
- QLineEdit 仿QQ签名框
- Android的内存优化
- Spring AOP分析(3) -- CglibAopProxy实现AOP
- [APIO 2016]Gap
- [android] 开启新的activity获取他的返回值
- bzoj1027 状压dp
- Java线程池参数
- mybatis oracle和mysql like模糊查询写法
- Linux给目录创建软链接的技巧
- [hihoCoder] 骨牌覆盖问题&#183;一
热门文章
- redis之master.slave主从复制
- 邓Laravel2020-01-28
- 使用Ajax时[object%20object] 报错的解决方案
- Navicat Premium 12永久激活
- rxjs简单的Observable用例
- [Git:commit错误] Fatal: cannot do a partial commit during a merge
- R语言入门:使用RStudio的基本操作
- 对于搭建网站中出现“You don&#39;t have permission to access this resource.”错误提示的解决思路
- Postman测试上传MultipartFile文件
- 吴裕雄--天生自然 R数据分析:2014年美国人时间使用调查(ATUS)饮食与健康模块文件分析