题意:给一个长度为n的字符串数组,你可以选定起点跳n次,从i点只能跳到(i*i+1)%n的位置,最后求一个最大字典序。

思路:要求最大的,即每一步都是最大,所以将最大的数都入队进行bfs跳下一步。

剪枝:1.如果该点跳到下一步比其他点跳到下一步要小就剔除

2.如果存在某两个点经过相同步数到达同一个点,那么他们之后的状态也是一样的这样也剔除。

ok,it is all。

首先我们用一个结构体包装步数step与所在的位置pos   node{step,pos}

用nex数组表示从该pos点调到下一步的位置的数的值

然后我们在优先队列自定义一个排序函数(最主要的剪枝其实是排序方式)

如果step与下一步的值nex[pos]都相等,我们按照pos从小到大排序

如果step相等,nex[pos]不相等 按照nex[pos]从大到小

如果step不相等,按照step从小到大

坑!!!  注意i*i爆int ,恶心心

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#include<time.h>
#include<unordered_map>#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a, b, c, d) min(min(a,b),min(c,d))
#define min3(x, y, z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
const int dir[4][2] = {0, -1, -1, 0, 0, 1, 1, 0};
typedef long long ll;
const ll inFF = 9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=2e5+5;
int d[maxn],ans[maxn],nex[maxn];
char s[maxn];
struct node
{int pos,step;bool friend operator<(node s,node e){if(s.step==e.step&&nex[s.pos]==nex[e.pos]) return s.pos<e.pos;if(s.step==e.step) return nex[s.pos]<nex[e.pos];return s.step>e.step;}
};
int main()
{int t;
//    freopen("E://1.in","r",stdin);
//    freopen("E://1.out","w",stdout);cin>>t;for(int p=1;p<=t;p++){int n;ll h;cin>>n;scanf("%s",s);int maxs=0;for(int i=0;i<n;i++) d[i]=s[i]-'0',maxs=max(d[i],maxs),ans[i]=-1;for(int i=0;i<n;i++) h=((ll)i*i+1)%n,nex[i]=d[h];ans[n]=-1;priority_queue<node> q;for(int i=0;i<n;i++) if(d[i]==maxs) q.push(node{i,1});ans[1]=maxs;int pre=-1;while(!q.empty()){node now=q.top();q.pop();ll c=now.pos;c=(c*c+1)%n;int step=now.step+1,pos=c;if(ans[step]==-1) q.push(node{pos,step}),ans[step]=d[pos],pre=pos;else if(d[pos]==ans[step]){if(pos!=pre){q.push(node{pos,step});pre=pos;}}if(ans[n]!=-1) break;}printf("Case #%d: ",p);for(int i=1;i<=n;i++) printf("%d",ans[i]);printf("\n");}
}

2017icpc沈阳 G Infinite Fraction Path BFS+剪枝相关推荐

  1. Infinite Fraction Path UVALive - 8207

    Infinite Fraction Path UVALive - 8207 题意: 给你n个数,每个数在0到9之间,每个数的下标一次是0~n-1,然后他所能走到的数为(i^2+1)%n,i为他本身的下 ...

  2. HDU6223 - Infinite Fraction Path

    HDU6223 - Infinite Fraction Path 做法1:枚举每个串取最大值,只用判断前20位,如果前20位都相同,可以认定两个串相同.因为很容易进入循环节,且循环节不太大. #inc ...

  3. HDU 6223 Infinite Fraction Path

    链接 http://acm.hdu.edu.cn/showproblem.php?pid=6223 Problem Description The ant Welly now dedicates hi ...

  4. 跳跃游戏 (动态规划剪枝/前缀和/滑动窗口/BFS剪枝)

    一.跳跃游戏简单介绍 1. 跳跃游戏简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr,从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步, ...

  5. 【POJ】3126-Prime Path BFS、剪枝技巧

    https://bbs.saraba1st.com/2b/forum.php 给两个四位数n ,m ,每次改变一位,最少改几次变成m,并且中途的数字要是素数. 注意:BFS的时候要注意使用use数组进 ...

  6. Frog Traveler 最短路,bfs剪枝,打印路径

    题意 : 给两个长度为n的数组,初始位于索引n,目标是越过索引1,注意不能往后跳,每次可以跳0到a[i]a[i]a[i]米,即,身处索引iii,可以跳[0,a[i]][0, a[i]][0,a[i]] ...

  7. poj3126 Prime Path BFS

    点击打开链接 Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26158   Accepted: 143 ...

  8. POJ 3126 Prime Path(BFS 数字处理)

    意甲冠军  给你两个4位质数a, b  每次你可以改变a个位数,但仍然需要素数的变化  乞讨a有多少次的能力,至少修改成b 基础的bfs  注意数的处理即可了  出队一个数  然后入队全部能够由这个素 ...

  9. 力扣 1553. 吃掉 N 个橘子的最少天数 记忆化DFS|记忆化BFS|剪枝

    吃掉 N 个橘子的最少天数 厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子. 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子. 如果剩余橘子数 n ...

最新文章

  1. 第三周项目一-个人所得税计算器
  2. 【前端酷站】分享一个纯 Javascript 的图表库与立体像素风制作~
  3. mysql 默认密码_mysql数据库安装
  4. css 不规则边角_如何实现带有边角的CSS边框
  5. ASP.NET(C#)获取客户端的网卡MAC代码
  6. 微信退款参数格式错误
  7. Python工具——tqdm:进度条
  8. 艾滋病多学科协作诊治模式的实施与成效
  9. 软件测试基础知识【纯知识分享】
  10. 有哪些超好用的邮件群发软件?这款做邮件推广的一定要试试!
  11. 在android studio中启动模拟器的时候报错...keeps shopping
  12. iOS 开发者必不可少的 75 个工具,你都会了吗
  13. Redis常用基本命令(1)
  14. 统计学中假设检验有关P值的讨论
  15. 大叔c语言,中年大叔的 C Coupe
  16. 抽奖机(用随机数)2.0-python
  17. C语言练习——提高篇
  18. Jacobian矩阵的理解
  19. 完美解决iphone连电脑蓝牙出现bluetooth外围设备无法正确安装
  20. debain10更换源和配置

热门文章

  1. ubuntu之路——day8.1 深度学习优化算法之mini-batch梯度下降法
  2. OWASP TOP10(2017)
  3. js动态创建元素之一--document.write
  4. python之接口开发
  5. Dwr 框架简单实例
  6. install python+twisted+mysqldb+django on mac
  7. 数据结构编程实战汇总
  8. UML for Java Programmers之dx实战
  9. CSS3无前缀脚本prefixfree.js与Animatable使用介绍
  10. 非常认同的《SEO优化大全》