蒟蒻第二篇题解。。。

比赛的时候写这道题MLE了qwq。。根据CF的赛制我也没敢再交第二次。。

简单讲一下思路好了(假装是dalao)。。根据题意要加一个或者不加新的点。。如果加一个新的点意味着从这个点往后的时间里状态都会反转(亮->灭&&灭->亮)。。则加入点后的亮灯时间=(点后总时间-点后原本亮灯时间)。。根据三个样例不难发现加的点位置在原有点的两侧并且两侧位置等价(这一点感性理解一下就好)。。然后就要在加点的时候判断一下已有点两侧是否能加点(一开始没看m最大1e9。。用vis数组判断直接MLE了。。。STL真好用)。。然后每个点默认按照右端加点计算新的亮灯时间(毕竟左右等价)。。和ANS取max更新结果(没错就是这样)。。

看起来没什么问题。。但是新的亮灯时间是(原前+现后)。。而计算原后也要用到原前(这是重点) 。。根据题意奇数个点是关闭的偶数点是开启的。。于是一段一段的加就得到总时间(过程中把截至每个点右侧是的亮灯时间都放入vector)。。于是大功告成。。

下面贴代码↓↓

#include<cstdio>//CF1000B
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
#include<string>
#include<cstring>
#include<cstdlib>
#include<cmath> using namespace std; int n,m,ANS,sm,N; vector<int>a,c; set<int>s; int main(){
int flag=0,re,u,v;
scanf("%d%d",&n,&m);
N=n+1;
a.push_back(0);
for(int i=1;i<=n;i++){
scanf("%d",&re);
a.push_back(re);
s.insert(re);
}
if(n%2==0){
a.push_back(m);
N++;
flag=1;
}
for(int i=0,j=i+1;i<N;i+=2,j=i+1){
u=a[i];
v=a[j];
sm-=(u-v);
c.push_back(sm);
c.push_back(sm+1);
}
ANS=sm;
for(int i=0;i<n;i++){
if(s.count(a[i+1]+1)&&s.count(a[i+1]-1)){
continue;
}
int now=c[i],ex=sm-now,et=m-a[i+1]-1;
ANS=max(ANS,now+et-ex);
}
printf("%d\n",ANS);
return 0;
}

Codeforces | CF1000B 【Light It Up】的更多相关文章

  1. CodeForces - 686D 【树的重心】

    传送门:http://codeforces.com/problemset/problem/686/D 题意:给你n个节点,其中1为根, 第二行给你2~n的节点的父亲节点编号. 然后是q个询问,求询问的 ...

  2. CodeForces 604C 【思维水题】`

    题意: 给你01字符串的长度再给你一个串. 然后你可以在这个串中选择一个起点和一个终点使得这个连续区间内所有的位取反. 求: 经过处理后最多会得到多少次01变换. 例如:0101是4次,0001是2次 ...

  3. CodeForces 593D【树链剖分】

    题意: 给你n个点和n-1条边组成的一棵树,按顺序给出数的每一条边. 询问m次,每次给出一个x求x除以从点a到点b所有边的权值和的乘积,还有修改,给出边的编号,修改某条边的权值. 思路: 树链剖分,用 ...

  4. CodeForces 131D【图特性+BFS】

    题意: 只有一个环,然后环都是0(环缩点相当于树的根),然后其余的输出到根的距离 思路: 可以从度为1的 开始搜 把那些分支全标记掉,然后再取没有标记掉的,BFS一下搞出距离. 具体这个标记: 倒着搜 ...

  5. CodeForces 125D【鸽巢原理】

    哇塞?开始的三个数其中两个数一定能确定一个序列.(鸽巢原理) #include <bits/stdc++.h> using namespace std; typedef long long ...

  6. CodeForces 723F【DFS瞎搞】

    题意: 给你一幅图,你要用这些边构造一个树, s和t两个节点的度数不能超过ds dt 而且图是保证没有环 思路: 树的性质是:无环(已经保证),无向(保证),连通(还要判断) 首先把S,T点从图里剥离 ...

  7. 【搜索】【并查集】Codeforces 691D Swaps in Permutation

    题目链接: http://codeforces.com/problemset/problem/691/D 题目大意: 给一个1到N的排列,M个操作(1<=N,M<=106),每个操作可以交 ...

  8. 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  9. 【并查集】【模拟】Codeforces 698B & 699D Fix a Tree

    题目链接: http://codeforces.com/problemset/problem/698/B http://codeforces.com/problemset/problem/699/D ...

随机推荐

  1. Latex常用

    插入罗马数字 \newcommand{\RNum}[1]{\uppercase\expandafter{\romannumeral #1\relax}} 然后在正文里面就可以用\RNum{}来添加罗马 ...

  2. 剑指offer(14)

    题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 思路: 这里有个细节,我们发现,6节点的子节点在操作之后并没有发生变化,所以等会我们在交换的时候,交换的不是节点的数值,而是整个节点. 另外我们进 ...

  3. hive自定义函数

  4. Node & CLI

    Node & CLI cli 生成文件的原理是什么 https://nodejs.org/api/cli.html http://nodejs.cn/api/cli.html CLI & ...

  5. tornado.gen.coroutine-协程

    http://blog.csdn.net/seeground/article/details/49488281  

  6. solr配置ik中文分词(二)

    上一篇文章主要介绍了solr的安装与配置,这篇文章主要记录如何使用ik分词器对中文进行分词. 步骤: 1.下载ik分词jar包:ik-analyzer-solr5-5.x.jar. 2.将下载的jar ...

  7. VS2017设置背景主题

    一.VS2017设置背景主题 1.下载并安装Color Theme Editor for Visual Studio 2017和MoeIDE (图中红圈中的两个插件,工具-扩展和更新-联机-右上角搜索 ...

  8. PHP超级全局变量、魔术变量和魔术函数

    PHP超级全局变量(9个) $GLOBALS 储存全局作用域中的变量 $_SERVER 获取服务器相关信息 $_REQUEST 获取POST和GET请求的参数 $_POST 获取表单的POST请求参数 ...

  9. js笔记2

    原型:prototype 和 __proto__ prototype 给他即将生成的对象继承下去的属性 prototype: 显式原型,每个function下都有prototype属性,该属性是一个对 ...

  10. sql行转列实例

    select gh ,xm , max(A.bz) as bz , max(A.jcz) as jcz , max(A.dl) as dl , max(A.czzx) as czzx , max(A. ...