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 题解的更多相关文章

  1. [Poi2012]Festival 题解

    [Poi2012]Festival 时间限制: 1 Sec  内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...

  2. Hdoj 1850.Being a Good Boy in Spring Festival 题解

    Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早 ...

  3. 【题解】Music Festival(树状数组优化dp)

    [题解]Music Festival(树状数组优化dp) Gym - 101908F 题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值.同一时刻只能看一个节目(边界不算),在所有种类都看过 ...

  4. CODE FESTIVAL 2017 qual A 题解

    补一发A的题解. A - Snuke's favorite YAKINIKU 题意: 输入字符串S,如果以YAKI开头输出Yes,否则输出No. #include<bits/stdc++.h&g ...

  5. Atcoder Code Festival 2017 qual C 10.22 D题题解

    [题意概述] 给出一个只有小写字母的序列,问最少把序列分成几段可以满足每一段可以通过变换成为回文串.变换指的是交换子序列中的字母的位置. [题解] 我们把a~z分别设为2^0~2^25,每个子序列满足 ...

  6. CODE FESTIVAL 2017 Final题解

    传送门 \(A\) 咕咕 const int N=55; const char to[]={"AKIHABARA"}; char s[N];int n; int main(){ s ...

  7. CODE FESTIVAL 2016 Grand Final 题解

    传送门 越学觉得自己越蠢--这场除了\(A\)之外一道都不会-- \(A\) 贪心从左往右扫,能匹配就匹配就好了 //quming #include<bits/stdc++.h> #def ...

  8. CODE FESTIVAL 2016 Final 题解

    传送门 \(A\) 什么玩意儿-- const char c[]={"snuke"}; char s[15];int n,m; int main(){ scanf("%d ...

  9. 题解【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 串 ...

随机推荐

  1. [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer

    [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 目录 [源码解析] PyTorch 分布式(11) ----- Dis ...

  2. 明明pip安装python的模块了,pycharm还是找不到的解决方案

    以前pycharm的安装包和python的环境一直都不能融合在一起,到了今天才知道,原来他们都是有自己的工作环境的 自己的工作环境(虚拟解释器)和安装python的工作环境(基本解释器)不是一个环境, ...

  3. 如何查看dpdk版本

    服务器上曾经装过很多版本的dpdk,此时如果编译某个程序出现奇怪错误的时候不由得会怀疑是不是dpdk版本的问题= = 令人吃惊的是,网上搜了一圈居然没有一个简单直接的方法能够直接使用,于是自己实验了一 ...

  4. 各种多项式操作的 n^2 递推

    zszz,使用 NTT 可以在 \(\mathcal O(n\log n)\) 的时间内求出两个多项式的卷积.以及一个多项式的 \(\text{inv},\ln,\exp,\text{sqrt}\) ...

  5. SpringCloud微服务实战——搭建企业级开发框架(三十):整合EasyExcel实现数据表格导入导出功能

      批量上传数据导入.数据统计分析导出,已经基本是系统必不可缺的一项功能,这里从性能和易用性方面考虑,集成EasyExcel.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项 ...

  6. absurd, abundant

    absurd How: absolutely, completely, clearly, faintly, manifestly, obviously, patently, quite, rather ...

  7. Android数据存取

    Android数据存取 一.SharedPreferencesc存取数据 SharedPreferences是使用键值对的方式来存储数据的,也就是在保存一条数据时,需要给这条数据提供一个对应的键,这样 ...

  8. recyclerView DiffUtil使用

    DiffUtil是和RecyclerView一块用的,DiffUtil用来比较两个数据集,他的最大用处是在RecyclerView刷新时,不在无脑. 以前adapter.notifyDataSetCh ...

  9. Nested Classes in C++

    A nested class is a class which is declared in another enclosing class. A nested class is a member a ...

  10. Handler与多线程

    1.Handler介绍 在Android开发中,我们常会使用单独的线程来完成某些操作,比如用一个线程来完成从网络上下的图片,然后显示在一个ImageView上,在多线程操作时,Android中必须保证 ...