HDU6223 && 2017沈阳ICPC: G. Infinite Fraction Path——特殊图&&暴力
题意
给定一个数字串,每个位子都能向(i*i+1)%n的位子转移,输出在路径上、字典序最大的、长度为n的串($n \leq 150000$)。
分析
先考虑一个暴力的方法,考虑暴力每个x,然后O(n)判定形成的字符串字典序是否比当前的最优解要大,复杂度O(n²),显然大家都会做。
而本题中有个结论:没有必要每次O(n),只要前100个字符一样,那么后面的一定都一样!所以>500直接break,复杂度O(500n), 可以过!
理解:对于所有的下标k,k向(k*k+1)%n连一条有向边,最后可以得到若干棵基环树构成的森林,这个森林有三个性质:①基环树特别的多;②每棵基环树环特别的小;③叶子巨多;这样子的话,字符串一定会很快进入一个环,两个字符串前面相等后面就一定都相等了.
回头想一下,当时就应该“乱搞”,这种图肯定比较简单,因为出题人也没法特意搞极端情况,这是由数字的性质决定的。
#include<bits/stdc++.h>
using namespace std; const int maxn = + ;
char s[maxn];
int n;
int nxt[maxn]; int main()
{
int T, kase=;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
scanf("%s", s);
for(int i = ;i < n;i++) nxt[i] = (1LL * i * i + ) % n;
char start = '';
for(int i = ;i < n;i++) if(s[i] > start) start = s[i];
int res = ;
for(int i = ;i < n;i++)
{
int cur = i, p = res;
if(s[i] == start)
{
for(int j = ;j < ;j++)
{
if(s[cur] < s[p]) break;
if(s[cur] > s[p]) {res = i; break;}
cur = nxt[cur];
p = nxt[p];
}
}
}
printf("Case #%d: ", ++kase);
for(int i = ;i < n;i++)
{
printf("%c", s[res]);
res = nxt[res];
}
printf("\n");
}
return ;
}
参考链接:https://blog.csdn.net/Jaihk662/article/details/81987188?tdsourcetag=s_pctim_aiomsg
HDU6223 && 2017沈阳ICPC: G. Infinite Fraction Path——特殊图&&暴力的更多相关文章
- 2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- 2017 icpc 沈阳 G - Infinite Fraction Path
题目大意:有n个点, 每个点有一个数字0 - 9, 第 i 个点只能到 第(i * i + 1)个点,问你在哪个点出发走n次构成的数字串最大. 思路:利用求后缀数组的倍增比较思想, 许多细节需要注意. ...
- HDU6223——2017ICPC沈阳G Infinite Fraction Path
题意: 给定一个数字串,每个位子都能向(i*i+1)%n的位子转移,输出路径上,字典序最大的,长度为n的串. 参考:https://www.cnblogs.com/mountaink/p/954144 ...
- ACM-ICPC 2017 沈阳赛区现场赛 G. Infinite Fraction Path && HDU 6223(BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223 参考题解:https://blog.csdn.net/qq_40482495/article/d ...
- hdu6223 Infinite Fraction Path 2017沈阳区域赛G题 bfs加剪枝(好题)
题目传送门 题目大意:给出n座城市,每个城市都有一个0到9的val,城市的编号是从0到n-1,从i位置出发,只能走到(i*i+1)%n这个位置,从任意起点开始,每走一步都会得到一个数字,走n-1步,会 ...
- 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 ...
- HDU6223 Infinite Fraction Path bfs+剪枝
Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...
- 记2017沈阳ICPC
2017沈阳ICPC 10月20日 早上十点抵达沈阳,趁着老师还没到,跑去故宫游玩了一下,玩到一点多回到宾馆,顺便吃了群里大佬说很好吃的喜家德虾饺(真的好好吃),回到宾馆后身体有点不舒服了,头晕晕的, ...
- Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解
题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...
随机推荐
- tomcat 指定(自定义)JDK路径的两种方式
1.情景展示 tomcat7使用jdk1.7:tomcat8使用jdk1.8.两个tomcat在一台机器下同时启动,你会发现这两个tomcat使用的是一个版本的jdk, 那就是你配置过的JAVA_ ...
- Visual Studio 调试系列3 断点
系列目录 [已更新最新开发文章,点击查看详细] 断点是开发人员的工具箱中最重要的调试技术之一. 若要暂停调试程序执行所需的位置设置断点. 例如,你可能想要查看代码变量的状态或查看调用堆栈的某些 ...
- candlestick用法
import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter, WeekdayLocator, DayLoc ...
- SpringBoot2配置prometheus浏览器访问404
背景:SpringBoot2的项目要配置 actuator + prometheus的健康检查,按照教程配置好之后再浏览器测试 http://localhost:port/prometheus 后40 ...
- 用欧拉计划学习Rust编程(第13~16题)
最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...
- 集合类源码(四)Collection之BlockingQueue(ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue)
ArrayBlockingQueue 功能 全名 public class ArrayBlockingQueue<E> extends AbstractQueue<E> imp ...
- [转帖]ASML EUV光刻机累计生产450万块晶圆:一台12亿元
ASML EUV光刻机累计生产450万块晶圆:一台12亿元 来源驱动之家 ...网页被我关了 就这样吧. 截至目前,华为麒麟990 5G是唯一应用了EUV极紫外光刻的商用芯片,台积电7nm EUV工艺 ...
- VS删除空白行
使用正则表达式, 搜索 (?<=\r\n)\r\n 替换空白
- 第七节:EF Core调用SQL语句和存储过程
一. 查询类(FromSql) 1.说明 A. SQL查询必须返回实体的所有属性字段. B. 结果集中的列名必须与属性映射到的列名相匹配. C. SQL查询不能包含关联数据 D. 除Select以为的 ...
- Mysql 错误:Duplicate entry '0' for key 'PRIMARY'
[1]添加数据报错:Duplicate entry '0' for key 'PRIMARY' (1)问题现象 SQL 语句如下: DROP TABLE test_distinct; CREATE T ...