codechef [snackdown2017 Onsite Final] Fusing Weapons
题目描述
大厨最近迷上了一款勇者斗恶龙的游戏。 游戏每局开始前,会有 N 件武器摆成一圈。每件武器有一个整数的等级。大厨可以选择两件 相邻的等级相同(不妨设同为 A 级)的武器,将它们合成。这两件武器在合成后就消失了,取而 代之,在它们原本所在的位置上出现的是一件 A + 1 级的武器。 大厨可以合成任意多次,而游戏的目标就是合成出尽可能高等级的武器。每关之间互不影响。 请你帮大厨求出每局游戏能合成得到武器的最高等级。
输入格式
输入第一行,包含一个整数 T,表示游戏局数。下面是 T 局游戏的描述。 每局的描述中,第一行包含一个整数 N,代表初始时武器的数量。第二行包含 N 个整数 L1, . . . , LN,依次代表第 1 到第 N 件武器的初始等级。第 i 和第 i + 1 (1 ≤ i < N) 件武器相邻, 而且第 N 和第 1 件武器相邻。
输出格式
对于每局游戏,输出一行,包含一个整数,代表大厨能合成出的武器的最高等级。
没什么想法啊,膜了膜别人的AC代码
大概意思就是先把序列倍长,然后从低等级到高等级枚举,每个位置记录以这个点为终点的合并后最大等级,注意不要越界就好了哇……
别人代码看多了可以用优先队列的东西都用上set了。
#include<set>
#include<cstdio>
#include<algorithm>
#define mp make_pair
#define pi pair
#define fi first
#define se second
#define MN 4000001
using namespace std; int T,n,m,ne[MN],ma[MN],a,mmh;
set<pi<int,int> > s;
int main(){
scanf("%d",&T);
while (T--){
s.clear();
scanf("%d",&n);mmh=;
for (int i=;i<=n;i++){
scanf("%d",&a);
ma[i]=ma[n+i]=a;
ne[i]=i+;ne[n+i]=n+i+;s.insert(mp(a,i));s.insert(mp(a,i+n));
}
while (s.size()){
pi<int,int> k=*s.begin();s.erase(s.begin());
int w=ne[k.se];
if (w<=*n&&ne[w]-k.se<=n&&k.fi==ma[w])
ma[k.se]++,ne[k.se]=ne[w],s.insert(mp(ma[k.se],k.se));
}
for (int i=;i<=n+n;i++) if (ma[i]>mmh) mmh=ma[i];
printf("%d\n",mmh);
}
}
codechef [snackdown2017 Onsite Final] Fusing Weapons的更多相关文章
- codechef [snackdown2017 Onsite Final] AND Graph
传送门 题解给出了一个很强势的dp: i<K $$dp[i][len]*Fib[len+2-(t[i]==1)] -> dp[i+1][len]$$ $$dp[i][len]*Fib[le ...
- codechef [snackdown2017 Onsite Final] Minimax
传送门 题目描述 考虑一个 N 行 N 列的网格,行列编号均为 1 ∼ N.每个格子中包含一个整数.记 ri 为第 i 行的最小值,Ci 为第 i 列的最大值.我们称一个网格为好的,当且仅当满足:$$ ...
- 退役前的最后的做题记录upd:2019.04.04
考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ...
- CROC 2016 - Final Round [Private, For Onsite Finalists Only] C. Binary Table FWT
C. Binary Table 题目连接: http://codeforces.com/problemset/problem/662/C Description You are given a tab ...
- [JZOJ6089]【CodeChef 2014 April Challenge】Final Battle of Chef【数据结构】【整体二分】
Description \(n,q,V\leq 100000,w_i\leq 10^9\) Solution 又是一道大数据结构 由于有一个下取整,这就导致了不同时间的修改值是不能简单的直接加在一起的 ...
- Forethought Future Cup - Final Round (Onsite Finalists Only) C. Thanos Nim 题解(博弈+思维)
题目链接 题目大意 给你n堆石子(n为偶数),两个人玩游戏,每次选取n/2堆不为0的石子,然后从这n/2堆石子中丢掉一些石子(每一堆丢弃的石子数量可以不一样,但不能为0),若这次操作中没有n/2堆不为 ...
- Gym 102056I - Misunderstood … Missing - [DP][The 2018 ICPC Asia-East Continent Final Problem I]
题目链接:https://codeforces.com/gym/102056/problem/I Warm sunshine, cool wind and a fine day, while the ...
- java抽象、接口 和final
抽象 一.抽象类:不知道是具体什么东西的类. abstract class 类名 1.抽象类不能直接new出来. 2.抽象类可以没有抽象方法. public abstract class USB { ...
- Java内部类final语义实现
本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...
随机推荐
- react native仿微信性别选择-自定义弹出框
简述 要实现微信性别选择需要使用两部分的技术: 第一.是自定义弹出框: 第二.单选框控件使用: 效果 实现 一.配置弹出框 弹出框用的是:react-native-popup-dialog(Git地址 ...
- Ant学习笔记
前言:这段时间在学习Ant,发现这是一个很强大的构建工具.你可能使用了很长一段时间,才发现Ant能做数不完的事.总之,个人觉得,Ant学习门槛低,入门简单,能大概看懂程序,写一些简单的脚本即可,剩下在 ...
- vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化
一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...
- java递归实现文件夹文件的遍历输出
学习java后对一个面试小题(今年年初在团结湖面试的一个题目) 的习题的编写. ''给你一个文件,判断这个文件是否是目录,是目录则输入当前目录文件的个数和路径,''' /** * @author li ...
- MongoDB数据库详解
第1章 数据库管理系统 1.1 前言 01.数据的定义:文字.图像.地理位置信息(坐标.经纬度)等 02.数据库管理系统的定义:建立.存取和管理数据,保证数据安全和完整性的软件 03.常见的数据库管理 ...
- Webpack 2 视频教程 012 - 理解Webpack 中的 CSS 作用域与 CSS Modules
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- Webpack 2 视频教程 014 - 深入理解 Webpack 2 中的 loader
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- C#用DataTable实现Group by数据统计
http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html 1.用两层循环计算,前提条件是数据已经按分组的列排好序的. Dat ...
- ADO.NET访问数据库
1:ADO.NET数据库的方法和技术 2:ADO.NET的主要组成: 1>DataSet(数据集)-----独立于数据间的数据访问 2>.NETFramework(数据提供程序)----- ...
- Java 读取配置文件
1.读取XML文件使用dom4j-full.jar包的SAXReader解析: Document document=new SAXReader.reader("xml文路径/文件名xxx.x ...