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) ...
随机推荐
- Python中几个必须知道的函数
Python中自带了几个比较有意思的函数,一般在面试或者笔试基础的时候会问到,其中3个就是map.filter.reduce函数. 1.map(function, iterable) 它第一个要传的元 ...
- logstash grok
input { file { path => "/opt/service/test-service/logs/catalina-error*.log" type => ...
- k8s-prometheus 数据采集(node redis kubelet等)
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: kube-ops data: prometheu ...
- jenkins 构建日程表配置
其中有5个参数 第一个是代表分钟 H 表示随机 第二个是代表小时 9-15/4 9点到下午三点期间的每隔4个小时 第三个是代表天 * 任意一天 第四个是代表月份 1-11 表示1到11月份 第五个是 ...
- 数据结构和算法总结(三):A* 寻路算法
前言 复习下寻路相关的东西,而且A star寻路在游戏开发中应用挺多的,故记录下. 正文 迪杰斯特拉算法 说起A*得先谈谈Dijkstra算法,它是在BFS基础上的一种带权值的两点最短寻路贪心算法. ...
- TCP协议探究(一):报文格式与连接建立终止
一 TCP:传输控制协议报文格式 1 TCP服务 提供面向连接.可靠的字节流服务 面向连接意味着两方通信,不支持多播和广播 可靠性的支持: 应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给 ...
- SpringBoot与缓存、消息、检索、任务、安全与监控
一.Spring抽象缓存 Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口 ...
- 阅读文章《DDD 领域驱动设计-如何 DDD?》的阅读笔记
文章链接: https://www.cnblogs.com/xishuai/p/how-to-implement-ddd.html 文章作者: 田园里的蟋蟀 首先感谢作者写出这么好的文章. 以下是我的 ...
- ES6复制数组
ES6复制数组和合并数组 一.复制数组与合并数组 复制数组:它是复合数据类型,直接复制只是复制了指向底层数据结构的指针,而不是复制一个全新的数组 <!DOCTYPE html> <h ...
- docker 无法使用vi
更新来源 apt-get update 安装vim apt-get install -y vim