ZOJ 4103 浙江省第16届大学生程序设计竞赛 D题 Traveler 构造
这个题,正赛的时候也没有过,不过其实已经有了正确的解法,可惜时间不多了,就没有去尝试。
题意是有n个点,i点能通向i-1,然后i和i*2、i*2+1互通。
请你构造一种路径从1能走完所有点,并且不重复经过每个点。
一开始我先考虑了有什么方法能固定地走完所有点。
然后发现 1-(2)-(4)-3-(6)-5-(10)....()为跳跃
仅当走完了之前的所有点时才跳跃,跳跃完后再回退走完所有点。
这样走的话,是可以走完所有点的。
但是这样的限制是,我们只能在n=1/2/4/6/10...这些数时走完所有点,这个可行的集合可以用ai=(a(i-2)+1)*2来递推。
换句话说,我们只要求出数列a 就可以按这个数列走出方案。
这个题目i可以通向i*2,也可以通向i*2+1,所以我们得到了另一种移动方式ai=(a(i-2)+1)*2+1。
这样我们能走的数就多了许多(其实是全部数都能走完 233)
我们只要从ai=n 反向推这个数列前面的项,显然a(i-2)=ai/2-1或者(ai-1)/2-1
而且这个其实是固定的,奇数的话想/2一定要-1,偶数反之。
然后我们就求出了这个数列的ap ap-2 ap-4.....
数列的其他项其实不重要 只要满足ap>ap-1即可,可以随便构造(大概)。
以下为具体代码
#include<bits/stdc++.h>
using namespace std;
int i,i0,n,m,T;
bool vis[];
stack<int>stk;
vector<int>v;
int main()
{
vis[]=;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=;i<=n;i++)vis[i]=;
v.clear();
while()
{
if(n<=)break;
stk.push(n);
if(n%)n=(n-)/-;
else n=n/-;
}
int now=;
while()
{
v.push_back(now);
vis[now]=;
if(!vis[now-])now--;
else
{
if(stk.empty())break;
else if(now*==stk.top())
{
now*=;
stk.pop();
}
else if(now*+==stk.top())
{
now=now*+;
stk.pop();
}
else
{
if(!vis[now*])now=now*;
else now=now*+;
} }
}
for(i=;i<v.size();i++)printf("%d%c",v[i],i==v.size()-?'\n':' ');
}
return ;
}
ZOJ 4103 浙江省第16届大学生程序设计竞赛 D题 Traveler 构造的更多相关文章
- ZOJ 4100 浙江省第16届大学生程序设计竞赛 A题 Vertices in the Pocket 线段树+并查集
正赛的时候完全没看这个题,事后winterzz告诉我他想出来的解法. 首先题意是给出n个点,m次操作. 操作有一种是连接两个点,另一种是求此时再为这个图连k条边,最少和最多能有几个联通块. 最少的求法 ...
- ZZUOJ-1195-OS Job Scheduling(郑州大学第七届ACM大学生程序设计竞赛E题)
1195: OS Job Scheduling Time Limit: 2 Sec Memory Limit: 128 MB Submit: 106 Solved: 35 [id=1195&quo ...
- angry_birds_again_and_again(2014年山东省第五届ACM大学生程序设计竞赛A题)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2877 题目描述 The problems ca ...
- 湖南省第六届大学生程序设计大赛原题 F Biggest Number (UVA1182)
Biggest Number http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30851#problem/F 解题思路:DFS(检索)+BF ...
- 黑龙江省第七届大学生程序设计竞赛-Mysterious Organization
描述 GFW had intercepted billions of illegal links successfully. It has much more effect. Today, GFW i ...
- 黑龙江省第七届大学生程序设计竞赛-Heap
描述 A heap is a full binary tree; for each node, its key is greater than its two sub-node’s key. Two ...
- 《内蒙古自治区第十三届大学生程序设计竞赛试题_H 公孙玉龙》
这个题有点小坑,最坑的地方就是 输入的b 变量 有可能 是 负数 ! 负数 ! 负数! 对 ,你没有看错,就是负数,坑死我了, 一直都是 content.charAt(0) 判断 ...
- 浙江财经大学第十五届大学生程序设计竞赛------B 烦恼先生打麻将
问题 B: B - 烦恼先生打麻将 时间限制: 1 Sec 内存限制: 256 MB提交: 8 解决: 5[提交][状态][讨论版] 题目描述 输入 6 6 Z D 1S 1S 9W 5W 2S ...
- River Crossing---河南省第六届大学生程序设计竞赛
题目描述 Afandi is herding N sheep across the expanses of grassland when he finds himself blocked by a ...
随机推荐
- hdu 3085
Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 深入浅出图解【计算机网络】 之 【TCP可靠传输的实现2: 超时重传+拥塞控制】
[前言]上一篇文章介绍了关于TCP的基础知识,以及建立(释放)连接和滑动窗口的概念. 本篇文章将延续上一篇的思路,继续介绍TCP实现可靠传输的机制. 超时重传 上一篇文章里介绍过TCP采用停止等待协议 ...
- js-权威指南学习笔记13
第十三章 Web浏览器中的JavaScript 1.在客户端JS中,window对象也是全局对象. 2.window对象中其中一个最重要的属性是document,它引用Document对象. 3.JS ...
- github上的项目发布成静态网页
代码上传成功之后就可以发布静态网页了,细心的童鞋应该已经看到我上传的代码在根目录就有一个html文件(发布其他情况没试过,感兴趣自己去尝试),发布的时候选择仓库即自动识别了. 第一步:点击settin ...
- python学习笔记之—— calendar(日历)模块
内置函数month() #!/usr/bin/python import calendar print calendar.month(2017,12) 输出: December 2017 Mo Tu ...
- sqlserver为数据库表增加自增字段
需求: 数据库为SQLServer.对已有的数据库表customer加一个序号字段,一次性对所有现存客户加上编号,并在新建客户时自动增加一个编号,数值自增1. 解决方法: 1. 复制表结构.把原 ...
- redis 管道技术 pipeline 简介
redis数据库的主要瓶颈是网络速度,其次是内存与cpu.在应用允许的情况下,优先使用pipeline批量操作.pipeline批量发出请求/一次性获取响应:不是发出多个请求,每个请求都阻塞等待响应, ...
- 一个Interface 继承多个Interface 的总结
我们知道在Java中的继承都是单继承的,就是说一个父类可以被多个子类继承但是一个子类只能有一个父类.但是一个接口可以被不同实现类去实现,这就是我们说的Java中的多态的概念.下面我们再来说一下接口的多 ...
- 团队项目——软件需求分析(NABCD)
一.团队项目简介 团队名称:SmartCoder 项目名称:<一起> 二.针对 " 地图可视化查看发布的内容 " 这一特点进行 NABCD 分析 N(Need需求) 往 ...
- 精华阅读第 12 期 | 最新 App Store 审核指南与10大被拒理由?
很多时候,我们对技术的追求是没有止境的,我们需要不断的学习,进步,再学习,再进步!本文系移动精英开发俱乐部的第12期文章推荐阅读整理,其中涉及到了 Android 数据库框架,架构设计中的循环引用,同 ...