题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串。

思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn)。代码很多地方借鉴后缀数组。

倍增:比如这次排序好了长度为m的串,那么想扩展为长度为2*m的串则需要用i的排名为第一关键字,i+m的排名为第二关键字进行排序,这种排序正好可以使用基数排序。

下面是代码:

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=;
int n;
int m;
int tp[maxn],Rank[maxn],SA[maxn],tax[maxn];
void Rsort()///SA为排名为i的元素所在的位置,tp为第二关键字,Rank作为第一关键字,Rank为i元素的排名。
{
for(int i=; i<=m; i++)tax[i]=;
for(int i=; i<=n; i++)tax[Rank[tp[i]]]++;
for(int i=; i<=m; i++)tax[i]+=tax[i-];
for(int i=n; i>=; i--)SA[tax[Rank[tp[i]]]--]=tp[i];
}
char st[maxn];
int go[maxn][];
int main()
{
int t;
while(~scanf("%d",&t))
{
int c=;
while(t--)
{
scanf("%d",&n);
scanf("%s",st+);
for(long long i=; i<=n; i++)
go[i][]=((i-)*(i-)+)%n+;///滚动数组,倍增查找i后面的第2^k的位置。
m=;
for(int i=; i<=n; i++)
tp[i]=i,Rank[i]=st[i]-'';
int p;
for(int t=; t<&&(<<t)<=n; t++)
{
for(int i=;i<=m;i++)tax[i]=;
for(int i=; i<=n; i++)tax[Rank[go[i][t&]]]++;
for(int i=;i<=m;i++)tax[i]+=tax[i-];
for(int i=;i<=n;i++)tp[tax[Rank[go[i][t&]]]--]=i;
Rsort();
swap(tp,Rank);
Rank[SA[]]=p=;
for(int i=; i<=n; i++)Rank[SA[i]]=(tp[SA[i]]==tp[SA[i-]]&&tp[go[SA[i]][t&]]==tp[go[SA[i-]][t&]])?p:++p;
if(Rank[SA[n]]!=Rank[SA[n-]])break;///剪枝,如果已经能确定最大的了 直接break
m=p;
for(int i=;i<=n;i++)
go[i][!(t&)]=go[go[i][t&]][t&];///这里是倍增,go[i]代表i后面第2^t的元素的位置
}
printf("Case #%d: ",c++);
long long loc=SA[n]-;
for(int i=; i<n; i++,loc=(loc*loc+)%n)
printf("%c",st[loc+]);
puts("");
}
}
return ;
}

Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解的更多相关文章

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

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

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

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

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

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

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

  5. HDU 6205 2017沈阳网络赛 思维题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6205 题意:给你n堆牌,原本每一堆的所有牌(a[i]张)默认向下,每次从第一堆开始,将固定个数的牌(b ...

  6. 2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)

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

  7. HDU 6200 2017沈阳网络赛 树上区间更新,求和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6200 题意:给个图,有2种操作,一种是加一条无向边,二是查询u,v之间必须有的边的条数,所谓必须有的边 ...

  8. HDU 6199 2017沈阳网络赛 DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6199 题意:n堆石子,Alice和Bob来做游戏,一个人选择取K堆那么另外一个人就必须取k堆或者k+1 ...

  9. HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 题意:n+1 个点 n 条边的树(点标号 0 ~ n),有若干个点无法通行,导致 p 组 U V ...

随机推荐

  1. ASP.NET Core 使用 URL Rewrite 中间件实现 HTTP 重定向到 HTTPS

    在传统 ASP.NET 程序中,我们可以通过配置 IIS 的“URL 重写”功能实现将 HTTP 请求重定向为 HTTPS .但是该方法在 ASP.NET Core 应用中不再工作.在 ASP.NET ...

  2. Java数字签名——RSA算法

    数字签名:带有密钥(公钥,私钥)的消息摘要算法. 验证数据的完整性,认证数据的来源,抗否性 OSI参考模型 私钥签名,公钥验证 签名算法:RSA,DSA,ECDSA 算法1 :RSA MD,SHA两类 ...

  3. 《精通android网络开发》--HTTP数据通信

    No1: 例如:http://www.*****.com/china/index.htm 1)http:// 代表超文本传送协议,通知*****.com服务器显示web页,通常不用输入 2)www 代 ...

  4. Java中的自定义数组队列

    在Java中,作为所有数据结构中存储和获取速度最快的一种,数组凭借其这种简单易用的优势在各个方面都能大显神威.但是数组也有自身的局限性.数组的长度必须是固定的一旦定义之后就无法动态的更改,这就会造成这 ...

  5. 浏览器兼容的JS写法总结

    一.元素查找问题 1. document.all[name]   (1)现有问题:Firefox不支持document.all[name]   (2)解决方法:使用getElementsByName( ...

  6. rpm检验是否被改动过

    参考原文http://vbird.dic.ksu.edu.tw/linux_basic/0520rpm_and_srpm.php#rpmmanager_verify   rpm -qVa   (当然可 ...

  7. SQL Server使用侦听器IP访问时遇到"The target principal name is incorrect. Cannot generate SSPI context"

    在测试SQL Server 2016 Always On时,在创建侦听器后,在客户端使用SSMS, 可以用侦听器名称访问Always On集群,但是使用侦听器IP访问时遇到"The targ ...

  8. stm32之keil开发环境搭建

    只要按照下面的一步步来,绝对能从0开始建立一个STM32工程.不仅包括工程建立过程,还有Jlink设置方法.本文使用芯片为STM32F103CB. 1 下载stm32F10x的官方库 http://w ...

  9. 移动端web开发安卓和ios客户端在时间转换上的差异性问题

    作为一名移动前端开发的人员,平时遇到的兼容性问题不在少数.那么,今天就来说一下最近遇到的一个小坑(关于Android和ios在时间转换上的差异性问题)话不多说,直接上重点. 最近接到了一个需求,很简单 ...

  10. [mysql] 2进制安装和简单优化

    ##################################mysql 2进制安装和简单优化################################################## ...