题意:

给出一个长度为 nnn 个序列,每个点有一个值。每次可以选择一段长度为 3/4/53/4/53/4/5 的区间,令区间中的每一个点的值减 111。问是否有可以使这个序列变为全 000。(1≤n≤2∗1e5)(1\leq n\leq 2*1e5)(1≤n≤2∗1e5)


思路:

首先,根据裴蜀定理可知,根据 333、444、555 即可构造出任意 x(x≥3)x(x\geq 3)x(x≥3)。因此题目可以转换成,可以选择一段长度大于等于3的区间,令区间上每个点的值 −1-1−1。

由于是每次将整个区间的值 −1-1−1,进行模拟的时候对区间上每个元素进行操作,复杂度过高,因此将序列转为差分序列,将区间操作变成单点操作。

得到差分序列之后,每次可以选择点 iii 和点 jjj,i+3≤ji+3\leq ji+3≤j,b[i]=b[i]−x,b[j]=b[j]+xb[i]=b[i]-x,b[j]=b[j]+xb[i]=b[i]−x,b[j]=b[j]+x。

转换到这里,这个问题就很好解决了,循环跑一遍差分序列,如果为正,则将值加入 sumsumsum,并查看距离当前为 iii 的点是否为负,若为负则令其为正。最后查看 sumsumsum 是否为 000 即可,具体的一些细节可以看代码。


总结:

  • 遇到区间操作,即考虑差分,变区间为单点。
  • 3/4/53/4/53/4/5 可以组成任意数。

代码:

#include <bits/stdc++.h>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 2*1e5+100;
const db EPS = 1e-9;
using namespace std;int n;
ll a[N],b[N];int main()
{int _; scanf("%d",&_);rep(Ca,1,_){scanf("%d",&n);  rep(i,1,n) scanf("%lld",&a[i]);b[1] = a[1]; b[n+1] = -a[n];rep(i,2,n) b[i] = a[i]-a[i-1];ll sum = 0;rep(i,1,n+1){if(b[i] >= 0) sum += b[i];else {sum = 1; break;}int j = i+3;if(j <= n+1 && b[j] < 0)sum += b[j], b[j] = 0;if(sum < 0) break;}printf("Case #%d: ",Ca);if(sum != 0) printf("No\n");else printf("Yes\n");}return 0;
}

【Gym-101775 J】Straight Master【差分、贪心】相关推荐

  1. 2017-2018 ACM-ICPC Asia East Continent League Final J. Straight Master(差分+思维)

    LINK] 首先能每次选择长度为3,4,53,4,53,4,5的区间长度加一 相当于可以让长度大于等于333任意的区间整体加一,因为3,4,53,4,53,4,5可以凑成任意数 但这样还是不好写,考虑 ...

  2. 【Gym - 101775J】Straight Master(差分,思维)

    题干: A straight is a poker hand containing five cards of sequential rank, not necessarily to be the s ...

  3. Gym - 101775J Straight Master(差分数组)

    题目链接:点击查看 题目大意:给出n种数,每种数有a[i]个,每3-5种连续的数都可以被消去,现在问给出的所有数字最后能否全部消去 题目分析:正难则反,题目问能否将数字全部消去,我们不妨设一开始的起点 ...

  4. HDU 6709“Fishing Master”(贪心+优先级队列)

    传送门 •参考资料 2019CCPC网络选拔赛 H.Fishing Master(思维+贪心) •题意 池塘里有 n 条鱼,捕捉一条鱼需要花费固定的 k 时间: 你有一个锅,每次只能煮一条鱼,其中煮熟 ...

  5. [CodeForces gym 101630 J] 过路费(最短路)

    problem 给定一张图 nnn 个点 mmm 条边,并给定阈值 kkk,以及起终点 s,ts,ts,t. 然后每条边经过都需要支付 www 的花费,形如 (u,v,w)(u,v,w)(u,v,w) ...

  6. Gym 101775J Straight Master(差分数组)题解

    题意:给你n个高度,再给你1~n每种高度的数量,已知高度连续的3~5个能消去,问你所给的情况能否全部消去:例:n = 4,给出序列1 2 2 1表示高度1的1个,高度2的2个,高度3的2个,高度4的1 ...

  7. C. Little Girl and Maximum Sum【差分 / 贪心】

    贪心,思路很简单.肯定是公共次数最多的,放最大的值.以此类推. 我们可以用差分来维护,快速的给区间加1.最后统计每一个点背统计的次数. 然后将数值按照从大到小.给出现次数多的点赋值构造数组.最后前缀和 ...

  8. CodeForces - 1491C Pekora and Trampoline(差分+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列 aaa,aia_iai​ 表示第 iii 个蹦床的强度,当从第 iii 个蹦床起跳的话可以跳到 i+aii+a_ii+ai​ 的位置,但是 ...

  9. gym/100633/J Ceizenpok’s formula

    题意:给出n,m,p输出C(n,m)%p p不一定是素数 #include <iostream>//ex_Lucas模板 #include <cstdio> #include ...

  10. P1969 [NOIP2013 提高组] 积木大赛(差分+贪心)

    本题相较于增减序列更加简单 刚开始给我们一个全是0的数组,求变到目标数组的最小操作数 逆向思维一下,给我们一个数组,求让他变为全为0的数组   的最小操作数 那么只需要记录一下  差分数组中所有> ...

最新文章

  1. 自定义表单mysql_自定义表单,计算答案然后更新mysql DB(Custom form, calculate answer then update mysql DB)...
  2. AutoCAD安装失败怎样卸载重新安装AutoCAD,解决AutoCAD安装失败的方法总结
  3. Hadoop伪分布式环境搭建
  4. 实习技术员的基本功(四)
  5. 云服务器40g能装sqlserver_双十一买2核4G云服务器,哪里更便宜
  6. c#将像素转换为页面单位
  7. 实体框架 Code First 迁移命令
  8. allavsoft mac版:支持从各种视频分享网站下载视频
  9. Docker-mysql 安装
  10. 主板故障的分析和诊断
  11. [luogu3369]普通平衡树(替罪羊树模板)
  12. 常用的107条Javascript
  13. 3000本英文名著PDF,TXT下载 300 M的文档资料
  14. 计算机网络 王道考研2021 第一章 -- 计算机网络组成 / 分类
  15. 即构SDK新增变声、立体声(3D环绕)、混响三大功能
  16. 何绍华Linux操作系统第3版章节课后答案习题
  17. c++逆天改命进阶--map_set
  18. 遇见你,是最美的意外
  19. poj2976 01分数规划
  20. 全国计算机软件测试工程师,全国计算机等级考试软件测试工程师.doc

热门文章

  1. MySql中PreparedStatement对象与Statement对象
  2. springMvc + websocket 实现点对点 聊天通信功能
  3. NO.109 禅道“红火”新年小礼,祝大家2014红红火火~~
  4. GreenDroid 开源UI组件
  5. 最新人生感悟语句摘选
  6. opencv(10)图像变换之边缘检测
  7. Mybatis高级映射一对多查询
  8. 顺序表的简单操作代码(c++实现)
  9. 4. 使用Keras-神经网络来进行MNIST手写数字分类
  10. OpenCV-图像处理(30、轮廓周围绘制矩形框和圆形框)