AT2202 硬度フェスティバル / Kode Festival 题解
Content
有 \(2^n\) 块石头,第 \(i\) 块石头硬度为 \(a_i\)。重复执行以下操作直到只剩下一块石头为止:
- 让当前编号为 \((1,2)\)、\((3,4)\)、…… 的石头互相碰撞,若一对中有一个石头比另一个石头硬度大,则硬度小的石头消失,硬度大的石头的硬度减去原来硬度小的石头的硬度。若一对中的两个石头硬度都相等,则随机选择一块消失,另一块硬度不变。
- 将剩下的石头按照它们的初始顺序重现排列并编号。
求最后剩下的一块石头的硬度。
数据范围:\(1\leqslant n\leqslant 18\),\(1\leqslant a_i\leqslant 10^9\)。
Solution
讲一下不用队列的方法,对新手来说会较为友好。
我们开一个 \(\textit{vis}\) 数组用来存储当前石头是否已经消失。然后直接重复模拟的过程,每次找一对当前相邻的石头进行碰撞。可以发现若两个石头的硬度都相等,随机选择一块消失并不会导致后面的结果不同,因此我们随便定一个石头消失就好了。
一轮结束后再循环判断当前是否只有一个石头,如果是的话直接输出这块石头的硬度即可。
Code
int a[1 << 19], vis[1 << 19]; // << 为左移符号,<< x 相当于乘 2^x
int main() {
int n = 1 << Rint, deb1 = -1, deb2 = -1, ans = -1;
F(int, i, 1, n) a[i] = Rint, vis[i] = 1;
while(1) {
F(int, i, 1, n) if(vis[i] == 1) {
if(deb1 == -1) deb1 = i;
else {
deb2 = i;
if(a[deb1] > a[deb2]) a[deb1] = a[deb1] - a[deb2], vis[deb2] = 0, deb1 = deb2 = -1;
else a[deb2] = a[deb2] - a[deb1], vis[deb1] = 0, deb1 = deb2 = -1;
}
}
int fl = 0;
F(int, i, 1, n) {
fl += vis[i];
if(vis[i]) ans = a[i];
}
if(fl == 1) break;
}
return println(ans), 0;
}
AT2202 硬度フェスティバル / Kode Festival 题解的更多相关文章
- [Poi2012]Festival 题解
[Poi2012]Festival 时间限制: 1 Sec 内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...
- Hdoj 1850.Being a Good Boy in Spring Festival 题解
Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早 ...
- 【题解】Music Festival(树状数组优化dp)
[题解]Music Festival(树状数组优化dp) Gym - 101908F 题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值.同一时刻只能看一个节目(边界不算),在所有种类都看过 ...
- CODE FESTIVAL 2017 qual A 题解
补一发A的题解. A - Snuke's favorite YAKINIKU 题意: 输入字符串S,如果以YAKI开头输出Yes,否则输出No. #include<bits/stdc++.h&g ...
- Atcoder Code Festival 2017 qual C 10.22 D题题解
[题意概述] 给出一个只有小写字母的序列,问最少把序列分成几段可以满足每一段可以通过变换成为回文串.变换指的是交换子序列中的字母的位置. [题解] 我们把a~z分别设为2^0~2^25,每个子序列满足 ...
- CODE FESTIVAL 2017 Final题解
传送门 \(A\) 咕咕 const int N=55; const char to[]={"AKIHABARA"}; char s[N];int n; int main(){ s ...
- CODE FESTIVAL 2016 Grand Final 题解
传送门 越学觉得自己越蠢--这场除了\(A\)之外一道都不会-- \(A\) 贪心从左往右扫,能匹配就匹配就好了 //quming #include<bits/stdc++.h> #def ...
- CODE FESTIVAL 2016 Final 题解
传送门 \(A\) 什么玩意儿-- const char c[]={"snuke"}; char s[15];int n,m; int main(){ scanf("%d ...
- 题解【AtCoder - CODE FESTIVAL 2017 qual B - D - 101 to 010】
题目:https://atcoder.jp/contests/code-festival-2017-qualb/tasks/code_festival_2017_qualb_d 题意:给一个 01 串 ...
随机推荐
- UNCTF2020 web writeup
1.Easy_ssrf 给了file_get_contents,直接读取flag即可 2.Easyunserialize 利用点在 构造uname反序列化逃逸即可 3.Babyeval 两个过滤,绕过 ...
- 【JavaSE】集合
Java集合 2019-07-05 12:39:09 by冲冲 1. 集合的由来 通常情况下,程序直到运行时,才知道需要创建多少个对象.但在开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不 ...
- layui的动态下拉选
<!--将授权问卷id全部查询出来--> <div class="layui-inline"> <label class="layui-fo ...
- python-django-数据查询条件
查询用户的状态是2或者是4的情况 空值和空字符串是不一样的东西!!! 需要注意的是: 项目setting.py里面的时区采用的是美国的时区,我们不要使用这个时区 使用这个时区的,我们输入的日期会进行转 ...
- R语言与医学统计图形【2】散点图、盒形图
R语言基础绘图系统 基础图形--散点图.盒形图 plot是一个泛型函数(generic method),对于不同的数据绘制不同的图形. par函数的大部分参数在plot中通用. 1.散点图 plot绘 ...
- MYSQL5.8-----5
- SpringBoot之HandlerInterceptorAdapter
SpringBoot之HandlerInterceptorAdapter 在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器.这样就 ...
- 如果你不想让pthread_join阻塞你的进程,那么请调用pthread_detach
如果你不想让pthread_join阻塞你的进程,那么请调用pthread_detach 2016年01月13日 16:04:20 炸鸡叔 阅读数:7277 转发自:http://baike.ba ...
- Simulating final class in C++
Ever wondered how can you design a class in C++ which can't be inherited. Java and C# programming la ...
- zabbix之被动模式之编译安装proxy
#:准备源码包,编译安装 root@ubuntu:/usr/local/src# ls zabbix-4.0.12.tar.gz root@ubuntu:/usr/local/src# tar xf ...