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. 大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列

    作者:韩信子@ShowMeAI,Joan@腾讯 地址:http://www.showmeai.tech/article-detail/tencent-ctr 声明:版权所有,转载请联系平台与作者并注明 ...

  2. git使用大全

    创建四个分支: 查看分支:git branch查看仓库里面所有的分支 git branch -a刷新分支 git remote update origin --prune创建分支:git branch ...

  3. 钓鱼小技巧-XLM

    前言 XLM钓鱼不是一项新的技术,自从公开以后,网上有很多对其的分析文章,这里仅仅做一个分享和摸索记录.文章中有问题的地方还请指出. 一个简单的例子 新建一个excel表格,右键选择表,选择插入 插入 ...

  4. AT4168 [ARC100C] Or Plus Max

    从\(whk\)回来了. 考虑我们需要维护一个子集的信息. 对于二进制的子集信息维护有一个很经典的操作: 高维前缀和. AT4168 [ARC100C] Or Plus Max // Problem: ...

  5. Codeforces 1332G - No Monotone Triples(数据结构综合)

    Codeforces 题目传送门 & 洛谷题目传送门 首先打表即可发现对于任意长度 \(\ge 5\) 的序列总存在一个 Monotone triple,证明不会实在不行直接 \(5^5\) ...

  6. 调用clapack库注意事项

    寒假期间在自己开发的模型DGOM里成功的用clapack替换了MKL,这里就介绍下遇到的几个坑,希望能够帮助别人少走弯路. 1. 调用clapack函数时注意整数类型为integer. 虽然clapa ...

  7. 【R】ggplot2的facet_warp/grid如何实现超过两类水平的分面?

    之前最多只做过两类单水平的分面,即两两组合的面板图.如果某类超过两个水平呢? 一类的分面:facet_wrap(~ align) 两类的分面(x轴和y轴):facet_grid(align ~ gen ...

  8. 【3】蛋白鉴定软件之Mascot

    目录 1.简介 2.配置 2.1在线版本 2.2 服务器版本 3.运行 3.1 在线版本 3.2 服务器版本 4.结果 1.简介 Mascot是非常经典的蛋白鉴定软件,被Frost & Sul ...

  9. vector去重--unique

    具体实现见中间源码 function template <algorithm> std::unique equality (1) template <class ForwardIte ...

  10. Ubuntu 和 windows1下文件夹共享的指令

    第一个是通过拖拉的方式将文件放到当前的目录下面,即 mv +路径 + . 第二个是将文件放到了硬盘里面/mnt/hgfs/linusshare/里面