Infinite Fraction Path

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 5756    Accepted Submission(s): 1142

Problem Description
The ant Welly now dedicates himself to urban infrastructure. He came to the kingdom of numbers and solicited an audience with the king. He recounted how he had built a happy path in the kingdom of happiness. The king affirmed Welly’s talent and hoped that this talent can help him find the best infinite fraction path before the anniversary.
The kingdom has N cities numbered from 0 to N - 1 and you are given an array D[0 ... N - 1] of decimal digits (0 ≤ D[i] ≤ 9, D[i] is an integer). The destination of the only one-way road start from the i-th city is the city labelled (i2 + 1)%N.
A path beginning from the i-th city would pass through the cities u1,u2,u3, and so on consecutively. The path constructs a real number A[i], called the relevant fraction such that the integer part of it is equal to zero and its fractional part is an infinite decimal fraction with digits D[i], D[u1], D[u2], and so on.
The best infinite fraction path is the one with the largest relevant fraction
 
Input
The input contains multiple test cases and the first line provides an integer up to 100 indicating to the total numberof test cases.
For each test case, the first line contains the integer N (1 ≤ N ≤ 150000). The second line contains an array ofdigits D, given without spaces.
The summation of N is smaller than 2000000.
 
Output
For each test case, you should output the label of the case first. Then you are to output exactly N characters which are the first N digits of the fractional part of the largest relevant fraction.
 
Sample Input
4
3
149
5
12345
7
3214567
9
261025520
 
Sample Output
Case #1: 999
Case #2: 53123
Case #3: 7166666
Case #4: 615015015
 
Source
 
Recommend
jiangzijing2015   |   We have carefully selected several similar problems for you:  6730 6729 6728 6727 6726 
 
这题要注意的细节还是有点多的,算是比较细腻处理的bfs的题目了.
 /*************************************************************************
> File Name: hdu-6223.infinite_fraction_path.cpp
> Author: CruelKing
> Mail: 2016586625@qq.com
> Created Time: 2019年09月18日 星期三 15时57分37秒
本题思路:BFS暴力,先找出最大的几个数的位置,接着bfs每次寻找下一层最大的值,直到
找到答案为止.
注意剪枝:1.如果在当前层寻找到了比最大值小的值直接pop.
2.如果当前层有多个结点通往下一层的同一个结点,只需要保留一个就行了.
************************************************************************/ #include <cstdio>
#include <queue>
#include <cstring>
using namespace std; typedef long long ll; const int maxn = + ;
char str[maxn], ans[maxn]; int M[maxn], tot;
bool vis[maxn]; int n; ll sta[maxn], top; struct node {
ll index, step;
}; bool operator < (node a, node b) {
if(a.step == b.step) return str[a.index] < str[b.index];
return a.step > b.step;
} void bfs() {
priority_queue <node> que;
for(int i = ; i < tot; i ++) {
que.push((node) {M[i], });//最大值入队列
}
ll last = ;
while(!que.empty()) {
node now = que.top();
que.pop();
if(last != now.step) {
last = now.step;
while(top) vis[sta[-- top]] = false;//把当前标记过得结点都释放,因为他们还可以继续访问
}
if(ans[now.step] > str[now.index] || now.step >= n || vis[now.index]) continue;//如果在当前层当前位置已经被访问过了就跳过这个结点, 如果当前已经找到了n个数就跳过这个结点,如果已经当前结点字典序小于之前访问过的最大值就跳过这个结点
sta[top ++] = now.index;//把当前访问的结点放入队列并标记
vis[now.index] = true;
ans[now.step] = str[now.index];//更新答案
que.push((node) {(now.index * now.index + ) % n, now.step + });//跳跃
}
while(top) vis[sta[-- top]] = false;
ans[n] = '\0';
} int _case; void print() {
printf("Case #%d: %s\n", ++_case, ans);
} int main() {
int t, _case = ;
int Max;
char k;
scanf("%d", &t);
while(t --) {
for(int i = ; i < n; i ++) ans[i] = ;
k = ;
tot = ;
scanf("%d", &n);
scanf("%s", str);
for(int i = ; i < n; i ++) {
if(str[i] > k) {
k = str[i];
}
}
for(int i = ; i < n; i ++) {
if(str[i] == k) {
M[tot ++] = i;//存储字符串中的最大值
}
}
bfs();
print();
}
return ;
}

2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)的更多相关文章

  1. HDU6223 Infinite Fraction Path bfs+剪枝

    Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...

  2. HDU6223 && 2017沈阳ICPC: G. Infinite Fraction Path——特殊图&&暴力

    题意 给定一个数字串,每个位子都能向(i*i+1)%n的位子转移,输出在路径上.字典序最大的.长度为n的串($n \leq 150000$). 分析 先考虑一个暴力的方法,考虑暴力每个x,然后O(n) ...

  3. hdu6223 Infinite Fraction Path 2017沈阳区域赛G题 bfs加剪枝(好题)

    题目传送门 题目大意:给出n座城市,每个城市都有一个0到9的val,城市的编号是从0到n-1,从i位置出发,只能走到(i*i+1)%n这个位置,从任意起点开始,每走一步都会得到一个数字,走n-1步,会 ...

  4. 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 ...

  5. Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解

    题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...

  6. hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map

    题目传送门 题目大意: 给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物).题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无 ...

  7. HDU 6229 Wandering Robots(2017 沈阳区域赛 M题,结论)

    题目链接  HDU 6229 题意 在一个$N * N$的格子矩阵里,有一个机器人. 格子按照行和列标号,左上角的坐标为$(0, 0)$,右下角的坐标为$(N - 1, N - 1)$ 有一个机器人, ...

  8. Heron and His Triangle 2017 沈阳区域赛

    A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integer ...

  9. 2017 ICPC/ACM 沈阳区域赛HDU6223

    Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java ...

随机推荐

  1. 查看是否安装jdk及路径

    JDK能否曾经装置,可以在cmd窗口里输出java -version,假定没有提示出错,就表示曾经装置. JDK的装置途径,可以输出java -verbose,会前往很多信息,其中就包括了JDK的装置 ...

  2. express中app和router的区别

      var app = express(); var router = express.Router(); 以上二者的区别是什么,什么时候用哪个最合适? 区别看下面的例子: app.js var ex ...

  3. 对html2canvas的研究

    介绍 该脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”.屏幕截图基于DOM,因此它可能不是真实表示的100%准确,因为它没有制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图. 这 ...

  4. UFUN函数 UF_TRNS(平移 变换)( uf5943 , uf5947)

    //设置class_dialog选择过滤 static int init_proc(UF_UI_selection_p_t select,void* user_data) { ; //实体 片体 UF ...

  5. shiro框架学习-4- Shiro内置JdbcRealm

    1.  JdbcRealm 数据库准备 JdbcRealm就是用户的角色,权限都从数据库中读取,也就是用来进行用户认证授权的安全数据源更换为从数据库中读取,其他没有差别,首先在数据库创建三张表: CR ...

  6. 在vue中结合render函数渲染指定的组件到容器中

    1.demo 项目结构: index.html <!DOCTYPE html> <html> <head> <title>标题</title> ...

  7. Selenium 多表单(frame/iframe)切换

    frame标签有frameset.frame.iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe需要切换进去才能定位到其中的元素 比如下面这个网 ...

  8. C# 异步编程,async与await的简单学习

    前提声明:C# 5.0 .NET Framework 4.5 2012-08-15 异步和等待(async和await).调用方信息(Caller Information)  (C#版本与.NET版本 ...

  9. Oracle-SQL程序优化4

    从事一年DBA工作,经验尚浅,但是遇到问题总还是能够解决,今天就谈下我遇到的一个比较奇葩的问题. 运维人员告知我下午过后ETL一直卡住没有继续,那时我以为又是什么兼容性问题引起的,就重跑一下ETL,谁 ...

  10. Floating Point Math

    Floating Point Math Your language isn't broken, it's doing floating point math. Computers can only n ...