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. 面试官又整新活,居然问我for循环用i++和++i哪个效率高?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 前几天,一个小伙伴告诉我,他在面试的时候被面试官问了这么一个问题: 在for循环中,到底应该用 i++ 还是 ++i ? 听到这,我感觉这面试官 ...

  2. .net core 和 WPF 开发升讯威在线客服系统:使用本地IP数据库实现访客来源快速定位,支持国外

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 免费使用 & 私有化部署:https://kf.shengxun ...

  3. centos与ubuntu安装及相关问题解答

    1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 答:Linus的发行版本有slackware,debian,redhat,Alpine,ArchLinux,Gentoo,LFS, ...

  4. 洛谷 P7323 - [WC2021] 括号路径(启发式合并)

    题面传送门 emmmm----怎么评价这个题嘛...感觉纯论算法,此题根本谈不上难题,不过 WC 时候太智障只拿了个 48pts 就走人了.总之,技不如人,甘拜吓疯( 首先要注意到几件事情: 如果 \ ...

  5. 洛谷 P6667 - [清华集训2016] 如何优雅地求和(下降幂多项式,多项式)

    题面传送门 wjz:<如何优雅地 AK NOI> 我:如何优雅地爆零 首先,按照这题总结出来的一个小套路,看到多项式与组合数结合的题,可以考虑将普通多项式转为下降幂多项式,因为下降幂和组合 ...

  6. 监督学习&非监督学习

    监督学习 1 - 3 - Supervised Learning  在监督学习中,数据集中的每个例子,算法将预测得到例子的""正确答案"",像房子的价格,或者溜 ...

  7. bluetooth sig bluetooth asia-深圳之行

    18年5月30日深圳参见蓝牙展会 主要了解下面 使用蓝牙和区块链构建室内导航定位系统和去中心化的MESH网络 -- 核心是通过iBeacon 来广播数据,典型用例是手机对手机的使用蓝牙进行交互,业界称 ...

  8. mysql 除法运算保留小数的用法

    说明:刚开始用的round(值1/值2*100,1) 结果没出效果,才搜到decimal函数 在工作中会遇到计算小数而且需要显现出小数末尾的0,我们会用到DECIMAL这个函数,这是一个函数非常强悍: ...

  9. Docker的基本使用及DockerFile的编写

    前言: 最近在准备面试,在复习到Docker相关内容时,想写一些东西分享给大家然后加深一下自己的印象,有了这篇随笔. Docker的简介: docker从文件系统.网络互连到进程隔离等等,极大的简化了 ...

  10. DOTA数据集

    航拍图像面临的问题 正常图像受重力作用相对固定,航拍图像的物体受拍摄角度影响 航拍图像的物体比例变化很大 某些航拍图像中小物体很密集 传统的数据集面临数据偏差的问题严重 好的数据集必备的几个特征 大量 ...