【赛后补题】(HDU6223) Infinite Fraction Path {2017-ACM/ICPC Shenyang Onsite}
场上第二条卡我队的题目。
题意与分析
按照题意能够生成一个有环的n个点图(每个点有个位数的权值)。图上路过n个点显然能够生成一个n位数的序列。求一个最大序列。
这条题目显然是搜索,但是我队在场上(我负责)最傻的穷举然后wa了(不是tle。。。),于是愣是没想到什么bfs/dfs,调到最后。
回来做,一次tle一次wa。tle显然是因为小霸王评测机变成了土豆评测机,然后采用bfs+剪枝的策略做题。(最优解)这里有两个显然的剪枝:
- 如果当前节点的值不如节点所在深度的目前最优解,剪枝
- 如果当前节点的当前值已经被搜索过(需要一个数组存储),剪枝
具体实现的细节见代码。
代码
#include <bits/stdc++.h>
#define PB push_back
#define MP make_pair
using namespace std;
#define NQUICKIO
#define NFILE
typedef long long ll;
typedef unsigned long long ull;
int mod[150005];
int ans[150005];
string str; int len,n,kase=0;
struct Node
{
int dep,cur;
Node(int _d,int _c):dep(_d),cur(_c) {}
bool operator<(const Node& rhs) const
{
if(dep!=rhs.dep) return dep>rhs.dep;
else if(str[cur]!=str[rhs.cur]) return str[cur]<str[rhs.cur]; // > before.
else return cur>rhs.cur;
}
};
void solve(int maxid)
{
priority_queue<Node> pq;
for(int i=0;i!=n;++i)
{
if(str[i]==str[maxid])
{
pq.push(Node(0,i)); //printf("push %d.\n",i);
}
}
string ans; ans.resize(n,char('0'-1));
int ac[150005]; memset(ac,-1,sizeof(ac));
while(!pq.empty())
{
auto now=pq.top(); pq.pop();
// printf("now dep=%d,now cur=%d.\n",now.dep,now.cur);
if(ans[now.dep]>str[now.cur]) continue;
if(ac[now.dep]!=-1 && ac[now.dep]>=now.cur) continue;
if(now.dep>=n) continue;
ans[now.dep]=str[now.cur];
ac[now.dep]=now.cur;
pq.push(Node(now.dep+1,mod[now.cur]));
}
cout<<"Case #"<<++kase<<": "<<ans<<endl;
}
int main()
{
#ifdef QUICKIO
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
#endif
#ifdef FILE
freopen("datain.txt","r",stdin);
freopen("dataout.txt","w",stdout);
#endif
int t; cin>>t;
while(t--)
{
cin>>n>>str;
for(int i=0;i<=n;++i) mod[i]=((ll)i*(ll)i+1)%n;
len=str.length();
int maxx=0;
for(int i=0;i!=len;++i)
if(str[i]>str[maxx]) maxx=i;
solve(maxx);
}
return 0;
}
【赛后补题】(HDU6223) Infinite Fraction Path {2017-ACM/ICPC Shenyang Onsite}的更多相关文章
- 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 bfs+剪枝
Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...
- 2017 ACM/ICPC Shenyang Online SPFA+无向图最长路
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- [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 ...
- 2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 2017 ACM/ICPC Asia Regional Qingdao Online
Apple Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submi ...
随机推荐
- linux shell——zsh的安装与使用
Shell是在程序员与服务器间建立一个桥梁,它对外提供一系列命令,让我们得以控制服务器.常用的Bash就是Shell的一种,也是Linux下默认Shell程序.这里介绍一种更强大的.更人性化的Shel ...
- 使用metasploit自带模块进行端口扫描
搜索模块: 选择查看: 设置&扫描:
- 随机森林算法-Deep Dive
0-写在前面 随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器.该分类器最早由Leo Breiman和Adele Cutler提出.简单来说,是一种bagging的思想,采用bootstra ...
- SpringMVC学习记录二——非注解和注解的处理器映射器和适配器
3 非注解的处理器映射器和适配器 3.1 非注解的处理器映射器 处理器映射器: org.springframework.web.servlet.handler.BeanNameUr ...
- P1800 software_NOI导刊2010提高(06)
P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...
- 【luogu P2984 [USACO10FEB]给巧克力Chocolate Giving】 题解
题目链接:https://www.luogu.org/problemnew/show/P2984 练习SPFA,把FJ当做起点,求出到所有牛的最短路,再把两个牛的相加. #include <cs ...
- vue watch数组或者对象
1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console. ...
- JavaScript的原型(prototype、__proto__、constructor)
构造函数:function Foo() {}; 实例对象: let f1 = new Foo; let o1 = new Foo; 一般函数都有prototype属性,除了window.Math和Fu ...
- Oracle-01-数据库分类/oracle sql*plus常用命令
一.数据库分类 一.数据库分类1.小型数据库:access.foxbase2.中型数据库:informix.sql server.mysql3.大型数据库:sybase.db2.oracle 二.项目 ...
- 《计算机图形学3D》
<计算机图形学方法原理应用> Opengl语言 光线跟踪 贝塞尔曲线 射线追踪 色彩理论 纹理映射 逆向运动 MPI 仿射 绘制流水线 透视变换 bre ...