HDU6223 Infinite Fraction Path bfs+剪枝
这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀。。
题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市,就可以得到一个长度为N的权值序列,求字典序最大的序列。
首先因为每个城市的出度为1,所以从任意城市出发都可以走出N步,通过打表可以发现度数为0的点几乎占了10分之9,也就是说大部分都是相同重复的部分。
虽然经过了一系列分析,但这并没有任何用,写了一发暴力dfs,T了。然后题解做题法,有几个解法,一个是鲲鲲有想到,但是卡常,我也不会。然后第二个就是bfs+剪枝。
有想到是搜索+剪枝,但一直想是怎么dfs记忆化,唉,太菜了。然后bfs很好理解,我们就按照深度的优先级一层层向下走,然后第一个剪枝就是,当前层已经保存的答案要是大于目前这个位置的权值,
那么很明显当前这个位置没必要扩展下去了,然后如果这个位置已经到过比现在更深的深度,那么有当前深度当那个深度之间的答案,已经被更新过了,那也没必要扩展了。
#include<cstdio>
#include<queue>
using namespace std;
const int N=2e5+;
char mp[N];
int n,maxv,ne[N],dep[N],val[N],ans[N];
struct Node{
int pos,dep;
Node(){}
Node(int pos,int dep):pos(pos),dep(dep){}
bool operator<(const Node &n1)const{
return dep==n1.dep ? val[pos]<val[n1.pos] : dep>n1.dep;
}
}qn;
void init(){
maxv=;
for(int i=;i<=n;i++){
dep[i]=ans[i]=-;
val[i]=mp[i]-'';
maxv=max(maxv,val[i]);
ne[i]=(1ll*i*i+)%n;
}
}
void bfs(){
priority_queue<Node> q;
for(int i=;i<n;i++)
if(val[i]==maxv) q.push(Node(i,));
while(!q.empty()){
qn=q.top();
q.pop();
if(ans[qn.dep]==-) ans[qn.dep]=val[qn.pos];
else if(ans[qn.dep]>val[qn.pos]) continue;
if(dep[qn.pos]<qn.dep) dep[qn.pos]=qn.dep;
else continue;
if(qn.dep==n-) continue;
q.push(Node(ne[qn.pos],qn.dep+));
}
}
int main(){
int t=,T;
scanf("%d",&T);
while(t<=T){
scanf("%d",&n);
scanf("%s",mp);
init();
bfs();
printf("Case #%d: ",t++);
for(int i=;i<n;i++) printf("%d",ans[i]);
printf("\n");
}
return ;
}
搜索呀
HDU6223 Infinite Fraction Path bfs+剪枝的更多相关文章
- 2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- hdu6223 Infinite Fraction Path 2017沈阳区域赛G题 bfs加剪枝(好题)
题目传送门 题目大意:给出n座城市,每个城市都有一个0到9的val,城市的编号是从0到n-1,从i位置出发,只能走到(i*i+1)%n这个位置,从任意起点开始,每走一步都会得到一个数字,走n-1步,会 ...
- 【赛后补题】(HDU6223) Infinite Fraction Path {2017-ACM/ICPC Shenyang Onsite}
场上第二条卡我队的题目. 题意与分析 按照题意能够生成一个有环的n个点图(每个点有个位数的权值).图上路过n个点显然能够生成一个n位数的序列.求一个最大序列. 这条题目显然是搜索,但是我队在场上(我负 ...
- [HDU6223]Infinite Fraction Path
题目大意: 有$n(n\leq 150,000)$个编号为$0_n-1$格子,每个格子有一个权值$w_i(0\leq w_i\leq 9)$.从任意一个点出发,按照一定的规则进行跳转.设当前的格子为$ ...
- 2017 ACM/ICPC 沈阳 G题 Infinite Fraction Path
The ant Welly now dedicates himself to urban infrastructure. He came to the kingdom of numbers and s ...
- hdu 6223 Infinite Fraction Path
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6223 题意:给定长度为n的一串数字S,现在要按照一种规则寻找长度为n的数字串,使得该数字串的字典序最大 ...
- Infinite Fraction Path(HDU6223 + bfs + 剪枝)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6223 题目: 题意: 给你一个长度为n的数字串,开始时你选择一个位置(记为i,下标从0开始)做为起点 ...
- HDU6223——2017ICPC沈阳G Infinite Fraction Path
题意: 给定一个数字串,每个位子都能向(i*i+1)%n的位子转移,输出路径上,字典序最大的,长度为n的串. 参考:https://www.cnblogs.com/mountaink/p/954144 ...
- HDU6223 && 2017沈阳ICPC: G. Infinite Fraction Path——特殊图&&暴力
题意 给定一个数字串,每个位子都能向(i*i+1)%n的位子转移,输出在路径上.字典序最大的.长度为n的串($n \leq 150000$). 分析 先考虑一个暴力的方法,考虑暴力每个x,然后O(n) ...
随机推荐
- HDU1401(双向BFS)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1401 给你8*8的棋盘和4个棋子初始位置.最终位置,问你能否在8次操作后达到该状态. 思路: 双向BFS, ...
- django API返回中文乱码
renturn HttpResponse(json.dumps(data,ensure_ascii=False))
- eclipse导入maven空项目,eclipse导入时不识别maven项目
经常我们在网上下载的一些开源项目中,想要导入eclipse中,却发现eclipse不识别这个项目,这时候怎么办呢? 解决办法多种多样,我这里举例出最实用的2种: 1.在项目的根目录中加入.classp ...
- Windows编程 Windows程序的生与死(上)
引子 “Windows 程序分为‘程序代码’和‘UI(User Interface)资源’两大部份,两部份最后以RC编译器(资源编译器)整合为一个完整的EXE 文件.所谓UI 资源是指功能菜单.对话框 ...
- 使用nodejs对Marketing Cloud的contact主数据进行修改操作
假设在Marketing Cloud有这样一个contact主数据: 现在需求是使用编程语言比如nodejs修改这个contact实例的高亮属性. 代码如下: var config = require ...
- 9.EL表达式 和 JSTL核心标签库
EL表达式 1./*获取数据*/ (某个web域中的对象,访问javabean的属性.访问List集合.访问Map集合.访问数组) <html> <head> <titl ...
- linux中公钥和私钥的区别以及关系
导读 在学习ssh章节时,一定有不少人对公钥和私钥产生过不解.在搜索公钥跟私钥的理解时,发现了这篇有趣的图解小文章,与大家共享. 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给 ...
- python遍历目录下所有文件
# -*- coding:utf-8 -*- import os if __name__ == "__main__": rootdir = '.\data' list = os.l ...
- input checkbod 全选 反选
<script> var CheckBox=div.getElementsByTagName('input'); ...
- 我的第一个Node.js项目
Node.js的安装通常有两种方式:自己编译源代码和使用编译好的文件,我这里使用编译好的文件目前我的home目录下有刚下载来的node-v4.2.3-linux-x641.首先解压缩 tar xvf ...