输入n(1<=n<=6),输出长度为10^n + n -1 的字符串答案。

其中,字符串以每n个为一组,使得所有组都互不相同,且输出的字符串要求字典序最小。

显然a[01...(n-1)]和a[12...n]为相邻组,可以看做有一条边从结点a[01...(n-1)]到结点a[12...n]。

题目转化成求欧拉通路。如果以每组的值为结点,则有10^6个结点,10^7条边。会MLE。(此时其实是哈密顿通路?)

这里以每组的值为边的边权,而边的2个结点分别是前n-1位数和后n-1位数。这样点是10^5个,边是10^6。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <map>
using namespace std; #define MP make_pair
#define ll long long
#define inf 0x3f3f3f3f
#define maxn 100010
#define maxm 1000010
int ten[]={1,10,100,1000,10000,100000,1000000};
struct Edge{
int v,nxt;
bool vis;
}e[maxm];
int head[maxn],esz;
void init(){esz=0;memset(head,-1,sizeof(head));}
void addedge(int u,int v){
e[esz].v=v,e[esz].nxt=head[u];
e[esz].vis=false;
head[u]=esz++;
}
int st[maxm],top;
int ans[maxm];
int main(){
//freopen("out","w",stdout);
int n,m;
while(~scanf("%d",&n) && n){
if(n==1){puts("0123456789");continue;}
init();
for(int i=0;i<ten[n-1];++i){
int x = i%ten[n-2];
for(int j=9;j>=0;--j){
addedge(i,x*10+j);
}
}
top=0;
int sz=0;
st[top++]=0;
while(top){
int u = st[--top];
bool f=false;
for(int i=head[u];i!=-1;i=e[i].nxt){
int v = e[i].v;
if(e[i].vis) continue;
e[i].vis = true;
st[top++]=u;
st[top++]=v;
f=true;
break;
}
if(f==false) ans[sz++]=u;
}
for(int i=0;i<n-2;++i) ans[sz++]=0;
//for(int i=sz-1;i>=0;--i) printf("%d ",ans[i]); puts("");
for(int i=sz-1;i>=0;--i) printf("%d",ans[i]%10);
puts("");
}
return 0;
}

最新文章

  1. Android Handler消息传递机制
  2. 简单的验证码识别(opecv)
  3. 使用wp_editor函数实现可视化编辑器
  4. php安装memcache注意事项
  5. uploadfile上传文件时ie浏览器无法弹出窗口
  6. Linux Shell编程(3):数组
  7. Unix/Linux环境C编程入门教程(38) shell命令进阶演示
  8. 关于http状态码204理解
  9. javascript不同数据类型的转换
  10. clientIDMode的应用
  11. c#语言简介
  12. java学习笔记11-static关键字
  13. qt之菜单项定制
  14. Java容器——List接口
  15. Yarn Node Labels
  16. Node入门教程(13)第十一章:mocha单元测试+should断言库+istanbul覆盖率测试+art-template
  17. Java设置运行时环境参数
  18. td高度不随内容变化display:block;display:block;display:block;display:block;display:block;
  19. 学习scalaenv
  20. Spring学习笔记:spring与mybatis四种整合方法

热门文章

  1. 9个让人印象深刻的网站 JS 视觉效果
  2. 种子填充算法描述及C++代码实现
  3. App 引导界面
  4. ASP.NET MVC载入页面常用方法
  5. 什么是Jedis?
  6. HTML form 表单
  7. wcf测试证书的创建
  8. iOS10遇到有推送的Demo真机报错的解决
  9. hdu 1410
  10. linux系统的学习