蒟蒻第二篇题解。。。

比赛的时候写这道题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. 搭建RISC-V错误记录

    错误:riscv64-unknown-elf-gcc: Command not found 解决办法:将riscv64-unknown-elf-gcc文件拷贝到根目录的/bin目录下. 原因是make ...

  2. #Leetcode# 1016. Binary String With Substrings Representing 1 To N

    https://leetcode.com/problems/binary-string-with-substrings-representing-1-to-n/ Given a binary stri ...

  3. vue单页面模板说明文档(3)

    Environment Variables Sometimes it is practical to have different config values according to the env ...

  4. [转帖]ipvsadm命令参考及其应用例子

    ipvsadm命令参考及其应用例子 https://blog.csdn.net/orichisonic/article/details/47375227 只是简单创建了 service和添加serve ...

  5. bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法

    bootstrap的modal中,使用remote可以动态加载页面到modal-body中,并弹窗显示 如果提供的是 URL,将利用 jQuery 的 load 方法从此 URL 地址加载要展示的内容 ...

  6. bootstrap模态框动态赋值, ajax异步请求数据后给id为queryInfo的模态框赋值并弹出模态框(JS)

    /查询单个 function query(id) { $.ajax({ url : "/small/productServlet", async : true, type : &q ...

  7. synchronized无法禁止指令重排序的证明

    package demo.reorder; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu ...

  8. liunx 运维知识一部分

    一   克隆虚拟机 大家都需要做的克隆虚拟机,在克隆虚拟机之前,需要把网卡源的UUID和Mac地址全部删除掉.不然相同会冲突使用不了. 删除UUID跟Mac的操作步骤如下:  cd /etc/sysc ...

  9. java.io.FileNotFoundException关于使用Intellij Idea时系统找不到指定文件的解决方案

    第一种:Intellij Idea 这个智障编辑器 在用的时候 是你在这个web目录下的空文件夹他是不给你部署的 解决在空文件夹下面随便放个文件夹就行了 第二种:也是最笨的方法,但是有前提条件就是 你 ...

  10. liunx安装nginx

    参考 https://blog.csdn.net/dyllove98/article/details/41120789 1,去官网下载最新的包 官网地址:http://nginx.org/downlo ...