蒟蒻第二篇题解。。。

比赛的时候写这道题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. 【转】RCP中org.eclipse.core.runtime.CoreException

    org.eclipse.core.runtime.CoreException: Plug-in TRAIN was unable to load class train.Application. 利用 ...

  2. 实现数据结构与算法需要掌握的C语言

    我使用C语言并不频繁,一般都是用来实现数据结构与算法,因为面向过程的编程方式容易理解算法的原理,但是呢,如果很长时间没写算法,那么就意味着C语言的某些语法就生疏了,但是总有那么一些,在写算法的时候,特 ...

  3. Tomcat connecttimeout sessiontimeout

    IIS中的会话超时和连接超时之间有什么区别? | Adept Technologies Inc.https://www.adepttech.com/blog/?p=825 IIS中的会话超时和连接超时 ...

  4. Leaf——美团点评分布式ID生成系统 UUID & 类snowflake

    Leaf——美团点评分布式ID生成系统 https://tech.meituan.com/MT_Leaf.html

  5. java kill thread command line

    multithreading - How do you kill a Thread in Java? - Stack Overflowhttps://stackoverflow.com/questio ...

  6. Cookie-parser

    let express = require('express'); let app =new express(); // 引入cookie-parser; let cookieParser = req ...

  7. Chrome 使用绿色版实现同一个机器 打开多个不同的chrome版本

    1. 之前找了一个方案能够实现 多个chrome版本的 同时安装 但是发现不是很好. 2. 最近的一个办法 就是使用chrome的绿色版来实现 3. 下载地址: https://www.chrome6 ...

  8. day 7-7 线程池与进程池

    一. 进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这 ...

  9. 爬虫 之Requests库的详细使用

    1.什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约我 ...

  10. 数据库语法group by

    因为在做pgsql和mysql数据库时group by 有报错,但是在以前做mysql5.6的时候没有问题,虽然知道时违反了sql的语法问题,但是没有搞清楚什么原因,也找了不少资料,查找原因,在盆友的 ...