The Red Button
The Red Button
问题
2
数据2
3
数据3
4
数据4
16
0 1 0
数据2
-1
数据3
0 1 3 2 0
数据4
0 1 2 4 9 3 6 13 10 5 11 7 15 14 12 8 0
对于30%的数据2<=n<=20
对于100%的数据2<=n<=105
解法
一开始的思路是DFS,每个节点最多有两个方向,可以就走,不能就回溯找另一个方向,这样数量大之后就会TLE,自测120多就出不来结果
TLE代码:
#include<bits/stdc++.h>
using namespace std; const int maxn=1e5+10;
int n;
int len;
int dist[maxn];
bool vis[maxn];
bool dfs(int k,int d)
{
if(d==n-1&&(k*2==n||k*2+1==n))
{
dist[d]=k;
dist[n]=0;
return true;
}
dist[d]=k;
// cout<<d<<" :"<<k<<endl;
int ne=(k*2)%n;
if(vis[ne]==false)
{
vis[ne]=true;
if(dfs(ne,d+1))
return true;
vis[ne]=false;
} int nex=(k*2+1)%n;
if(vis[nex]==false)
{
vis[nex]=true;
if(dfs(nex,d+1))
return true;
vis[nex]=false;
} return false;
} int main()
{
int i,j;
cin>>n;
vis[0]=true;
if(n&1)
cout<<"-1"<<endl;
else
{
if(dfs(0,0))
{
for(i=0;i<=n;i++)
{
if(i!=0)
cout<<" ";
cout<<dist[i];
}
} }
return 0;
}
正确解法:
只需标记所有节点一遍即可,第一个走头无路的点就是终点,第二个走投无路的点是倒数第二个终点。。。。
因此,只需标记完所有节点一次,就可得出结果的倒叙。反序后再加上0,就为最终答案。对于偶数直接输出-1

正确代码:
#include<bits/stdc++.h>
using namespace std; const int maxn=1e5+10;
int n; vector<int> dist;
bool vis[maxn];
void dfs(int k)
{
vis[k]=true;
if(!vis[(k*2)%n])
dfs((k*2)%n);
if(!vis[(k*2+1)%n])
dfs((k*2+1)%n);
dist.push_back(k);
} int main()
{
int i,j;
cin>>n;
vis[0]=true;
if(n&1)
cout<<"-1"<<endl;
else
{
dfs(0);
reverse(dist.begin(),dist.end());
dist.push_back(0);
for(i=0;i<dist.size();i++)
cout<<dist[i]<<" ";
cout<<endl;
}
return 0;
}
The Red Button的更多相关文章
- CodeForces - 325E:The Red Button (哈密尔顿 转 欧拉回路)
Piegirl found the red button. You have one last chance to change the inevitable end. The circuit und ...
- BootStrap中的button使用
原文地址:http://www.phloxblog.in/bootstrap-buttons/#.U5xYso2fclm 站点中事件的触发往往依赖于button或者超链接.因此,button能够觉得是 ...
- ReactNative入门(安卓)——API(下)
LayoutAnimation - layout动画 当布局发生改变时的动画模块,它有两个方法: 1. 最常用的方法是 LayoutAnimation.configureNext(conf<Ob ...
- 漫谈Nuclear Web组件化入门篇
目前来看,团队内部前端项目已全面实施组件化开发.组件化的好处太多,如:按需加载.可复用.易维护.可扩展.少挖坑.不改组件代码直接切成服务器端渲染(如Nuclear组件化可以做到,大家叫同构)... 怎 ...
- 基于Nuclear的Web组件-Todo的十一种写法
刀耕火种 刀耕火种是新石器时代残留的农业经营方式.又称迁移农业,为原始生荒耕作制. var TodoApp = Nuclear.create({ add: function (evt) { evt.p ...
- CSS 高级布局技巧
随着 IE8 逐渐退出舞台,很多高级的 CSS 特性都已被浏览器原生支持,再不学下就要过时了. 用 :empty 区分空元素 兼容性:不支持 IE8 /*假如我们有以上列表:*/ <div cl ...
- webpack
webpack 通过一个主文件 .js ,webpack把这个文件所有的依赖文件,都处理打包成js文件 webpack 可以干嘛?1.执行打包 (把require()模块化整合成一个js文件给html ...
- CSS 代码技巧与维护 ★ Mozilla Hacks – the Web developer blog
原文链接:https://hacks.mozilla.org/2016/05/css-coding-techniques/ 译文链接 :http://www.zcfy.cc/article/css-c ...
- 深入学习jQuery选择器系列第八篇——过滤选择器之伪子元素选择器
× 目录 [1]通用形式 [2]反向形式 [3]首尾元素 [4]唯一元素 前面的话 本文是子元素选择器的续篇,主要介绍关于nth-of-type()选择器的内容.该部分内容并非没有出现在<锋利的 ...
随机推荐
- kubernetes进阶(五)dashboard--WEB管理
dashboard是k8s的可视化管理平台,是三种管理k8s集群方法之一 首先下载镜像上传到我们的私有仓库中:hdss7-200 # docker pull k8scn/kubernetes-dash ...
- IDE - vscode
[一]VSCODE官方插件库 https://marketplace.visualstudio.com/ 最好能在文件->首选项->设置中,搜索update,将Auto Update关闭, ...
- wordpress 主题安装 您点击的链接已过期 nginx 出现413 Request Entity Too Large
1 nginx 出现413 Request Entity Too Large 问题是限制上传大小,解决: 1.打开nginx配置文件 nginx.conf, 路径一般是:/etc/nginx/ngin ...
- 关于rand()
虽然很早就知道rand是伪随机了,但是一般都懒得用srand. 直到模拟银行家算法时不用srand就造成数据实在有点假(-_-||) 所以要记得srand((int)time(0))啊
- MyBatis中传参时为什么要用#{}
MyBatis中传参时为什么要用#{},这个问题和MyBatis如何防止SQL注入类似.不过在解释这个问题之前,先解释一下什么是SQL注入,还有些称作注入攻击这个问题. SQL注入就是SQL 对传入参 ...
- HDU - 4725 The Shortest Path in Nya Graph 【拆点 + dijkstra】
This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just ...
- Leetcode(104)-二叉树的最大深度
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null,null,15,7], ...
- springboot(六)Email demo
项目中经常使用邮件发送提醒功能,比如说更新安全机制,发送邮件通知用户等 一.简单邮件发送 导入依赖: <dependency> <groupId>org.springframe ...
- BZOJ 3676 回文串(回文树)题解
题意: 一个回文的价值为长度 * 出现次数,问一个串中的子串的最大回文价值 思路: 回文树模板题,跑PAM,然后计算所有节点出现次数. 参考: 回文串问题的克星--Palindrome Tree(回文 ...
- js Promise finally All In One
js Promise finally All In One finally let isLoading = true; fetch(myRequest).then(function(response) ...