分析

必要条件:
① $\sum_{i=1}^{n} s_i = \sum_{i=1}^{n} t_i$

预处理:
将 $s, t$ 从小到大排序。

尝试一
首尾匹配。例子
s = 2, 2, 4, 7, 9
t = 4, 5, 5, 5, 5

4, 2, 4, 7, 7
4, 4, 4, 7, 5
4, 5, 4, 6, 5
4, 5, 5, 5, 5

反例
s = 1, 4, 5, 8
t = 2, 3, 6, 7

key observation:
考虑排好序的 $s$ 和 $t$。
① 要使操作次数尽可能少,每次操作必然使得某个 $s_i$ 变成某个 $t_j$ 。
这个我不会证明。

② 不考虑操作次数不超过 $5n$ 的限制。若有解则一定存在一种操作方法使得石头的相对位置不变。换言之,最后 $s_1$ 变成 $t_1$,$s_2$ 变成 $t_2$,$s_3$ 变成 $t_3$ ……

可以用反证法证明第二个结论。假设存在一开始 $s_i < s_j$ 而最后 $s_i > s_j$,那么考虑使 $s_i < s_j$ 变成 $s_i > s_j$ 的那次操作,假设这次操作是使 $s_i$ 变大,则可以把这次操作拆成两个:先把 $s_i$ 变成 $s_j$,再把 $s_j$ 变成 $s_i$ 的目标值。

于是我们可以把这个问题看成是一种括号匹配问题。
若 $s_i < t_i$ 则把 $t_i - s_i$ 看成“左括号”,若 $s_i > t_i$ 则把 $s_i - t_i$ 看成“右括号”。
若 $s_i < t_i$ 则把二元组 $(t_i - s_i, \text{$s_i$ 原来的下标})$ 放进栈里,遇到“右括号”就将其与栈顶的“左括号”配对,若栈顶的左括号被“耗尽”就将其弹出栈;若栈空了而“右括号”还有剩余则说明无解。

官方题解

代码

Codeforces 1148E Earth Wind and Fire的更多相关文章

  1. codeforces#1148E. Earth Wind and Fire(贪心)

    题目链接: http://codeforces.com/contest/1148/problem/E 题意: 给出两个长度为$n$的序列,将第一个序列变成第二个序列,顺序不重要,只需要元素完全相同即可 ...

  2. Codeforces 1148 E - Earth Wind and Fire

    E - Earth Wind and Fire 思路: 栈模拟 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC opti ...

  3. Earth Wind and Fire CodeForces - 1148E (构造)

    大意: $n$个石子, 第$i$个石子初始位置$s_i$, 每次操作选两个石子$i,j$, 要求$s_i<s_j$, 任取$d$, 满足$0\le 2d\le s_j-s_i$, 将$s_i,s ...

  4. Earth Wind 一个查看全球风向的网站

    可以查看整个地球的全貌 ,还能定位你的位置,特别是动画挺有意思 网址:https://earth.nullschool.net/#current/wind/surface/level/orthogra ...

  5. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  6. little alchemy攻略

    一个造物游戏: acidrain=rain+smoke airlplain=metal+bird alcohol=fruit+time algae=plant+water allergy=dust+h ...

  7. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

  8. JavaScript 构造函数与原型链

    构造函数.原型链: function Person(name, age, job) { this.name = name; this.age = age; this.job = job; // thi ...

  9. javascript中array常用属性方法

    属性: length 表示一个无符号 32-bit 整数,返回一个数组中的元素个数. 截短数组..截短至长度2  则:   .length = 2 方法: Array.from() 方法可以将一个类数 ...

随机推荐

  1. HGOI20191115 模拟赛 题解

    Problem A 表演 有$n$个有点权的点,$m$个有边权的边.对于每个点$u$,输出从这个点出发到$v$,其路径权值的两倍加上v的点权和最小的值. 对于$100\%$的数据,满足$1 \leq ...

  2. 「BZOJ 5161」最长上升子序列「状压DP」

    题意 求一个\(1\sim n\)的排列LIS的期望长度,\(n\leq 28\) 题解 考虑朴素的LIS:\(f[i] = min(f[j]) + 1\) 记\(mx[i]\)为\(f\)的前缀最大 ...

  3. 【集训队作业2018】line

    DP方程十分简单,考虑前对后贡献即可. \(f_i = \min_{l_i \leq j < i} \left\{ f_j + \left(\max_{j < k \leq i} \lef ...

  4. ie8中使用ajax总是进入error解决办法

    试过很多种方法有的说是因为要把cache:false,但是本人遇到的情况可能不同最终结局的办法是 引用的是<script src="js/jquery-1.4.2.min.js&quo ...

  5. UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)

    先看第一题,有n*m个点,求在这些点中,有多少条直线,经过了至少两点,且不是水平的也不是竖直的. 分析:由于对称性,我们只要求一个方向的线即可.该题分成两个过程,第一个过程是求出n*m的矩形中,dp[ ...

  6. LVS之DR模式

    目录: 网络环境 LVS服务器网络配置 LVS服务器添加ipvs规则 RS服务器配置 访问验证 抓包分析 注意事项 [网络环境] 网络拓扑结构如下表: 服务器 类型 网卡 IP MAC 说明 v_me ...

  7. redis 数据类型详解 以及 redis适用场景场合(滴滴)

    滴滴的面试官问了个问题关于redis的: 我现在想服务器每分钟接收一个用户的请求小于60个,如何处理: 答:使用Redis 缓存服务器,可以设置key=用户ID value不停地加一到了60就停止,然 ...

  8. 深入解析 composer 的自动加载原理

    PHP 自5.3的版本之后,已经重焕新生,命名空间.性状(trait).闭包.接口.PSR 规范.以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言.PHP 的生态系统也一直在演 ...

  9. 博客&git收藏

    阿里中间件团队博客 http://jm.taobao.orgkimmking https://blog.csdn.net/KimmKing/article/details/71517053 greys ...

  10. code备忘

    按空白符分隔(正则) String[] split = line.trim().split("\\s+");