洛谷 P5639 【CSGRound2】守序者的尊严 题解
简要题意:
从 \(1\) 号位开始走,可以连续走过一段连续的 \(0\) ,每走一次,所有位置取反。 (即 \(0 \gets 1\),\(1 \gets 0\)).
算法一
模拟暴力即可。
每次从当前位置模拟往后走到能走的最后一个点(即当前连续 \(0\) 的最后一个 \(0\) 的位置),然后暴力将每个位置取反。
时间复杂度: \(O(n^2)\).
实际得分:\(50pts\).
算法二
基于暴力,你可能想到这是线段树?
可是,这维护的是什么?不可而知。
每位取反?无法维护。
连续一段?倒是可以,但是取反维护不了啊……
所以,算法二 线段树 咕咕咕了。
算法三
你会发现,给出的数组必然是这样的一段:
\(0 0 0 0 0 0 ... 1 1 1 ... 0 0 0 ... 1 1 ...\)
也就是,一段连续的 \(0\) 和 一段连续的 \(1\) 交错而成。
我们需要跳开修改,解决问题。
以样例为例:
\(0 0 1 1 0 1\)
我们第一次走到 \(2\) 的位置,然后变成:
\(1 1 0 0 1 0\)
你会发现,如果不修改的话,其实你只要再走一段连续的 \(1\) ,和修改后走一段连续的 \(0\) 是一样的。
走到 \(4\) 的位置,然后变成:
\(0 0 1 1 0 1\)
你会发现,如果不修改的话,其实你只要再走一段连续的 \(0\) ,和修改后走一段连续的 \(1\) 是一样的。
所以,第偶数步我们走连续的 \(0\) ,奇数步走连续的 \(1\) ,模拟一遍。
时间复杂度: \(O(n)\).
实际得分: \(100pts\).
算法四
显然我们考虑另一个常数性的优化。
你会发现,你并不在乎 连续的一段有多少个 ,而关心 一共有多少段 ,这就是我们的答案。
那么,总段数其实就是 \(a_i \not = a_{i-1}\) 的个数再 \(+1\) .
很好理解:一开始只有一段,每改变一次就产生新的一段。
显然,这个无论从码量,时间都比算法三要优一些。
时间复杂度: \(O(n)\).
实际得分: \(100pts\).
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+1;
inline int read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
int x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
int n,a[N];
int s=0;
int main(){
n=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=2;i<=n;i++) s+=(a[i]!=a[i-1]);
printf("%d\n",s+1);
return 0;
}
洛谷 P5639 【CSGRound2】守序者的尊严 题解的更多相关文章
- 洛谷 P5639 【CSGRound2】守序者的尊严
洛谷 P5639 [CSGRound2]守序者的尊严 洛谷传送门 题目背景 由于Y校最近进行了对学校食堂的全面改革与对小卖部的全面整治(乱搞),导致学校小卖部卖的零食被禁售了:学校食堂的炸鸡窗口也消失 ...
- 【洛谷P3369】【模板】普通平衡树题解
[洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...
- 洛谷 P1992 不想兜圈的老爷爷 题解
洛谷 P1992 不想兜圈的老爷爷 题解 题目描述 一位年过古稀的老爷爷在乡间行走 而他不想兜圈子 因为那会使他昏沉 偶然路过小A发扬助人为乐优良传统 带上地图 想知道路况是否一定使他清醒 usqwe ...
- BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...
- 洛谷p3384【模板】树链剖分题解
洛谷p3384 [模板]树链剖分错误记录 首先感谢\(lfd\)在课上调了出来\(Orz\) \(1\).以后少写全局变量 \(2\).线段树递归的时候最好把左右区间一起传 \(3\).写\(dfs\ ...
- 洛谷 P1789 【Mc生存】插火把 题解
P1789 [Mc生存]插火把 题目背景 初一党应该都知道...... 题目描述 话说有一天 linyorson 在"我的世界"开了一个 \(n\times n(n\le 100) ...
- 洛谷 P1115 最大子序和
**原题链接** ##题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. **解法**: 1.暴力枚举 时间:O(n^3) 2.简单优化 时间:O(n ...
- 洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair题解
题目 打死我也没想到是贪心 虽然是lkx写了贪心题解让我去点赞我才写的这道题 神仙思路 首先排好序 假设我们现在只有一块木板 我们做一个差分数组 对这个差分数组排序之后 一次断开最长的区间 m-1次之 ...
- 一本通&&洛谷——P1120 小木棍 [数据加强版]——题解
题目传送 一道特别毒瘤能提醒人不要忘记剪枝的题. 首先不要忘了管理员的话.忘把长度大于50的木棍过滤掉真的坑了不少人(包括我). 显然是一道DFS题 .考虑剪枝. 找找搜索要面临的维度.状态:原始木棍 ...
随机推荐
- 这些科学家用DNA做的鲜为人知事,你估计都没见过!
DNA世界的每一步都给人类带来奇妙甚至吃惊的发现.研究人员越来越多地探索和掌握了生命中的分子.生物与技术之间的界限以前所未有的方式模糊,有时甚至更糟.但DNA也为复杂疾病带来简单的答案,存储奇怪的文件 ...
- EventBus 及一些思考
EventBus 是 Android 开发的一种常用框架,其解耦的思维令人赞叹 从特性上来讲,其与 Android SDK中的BroadcastReceiver很像,二者都是注册,发送事件,反注册,都 ...
- 微信小程序采坑之scroll-view
当设置了scroll-y为true之后,纵向是没有问题的,会出现滚动条. Android上一切都是那么的祥和, ios上你会发现如果你scroll-view里面的东西超过横向的宽度时,就会隐藏了. 也 ...
- LeetCode--链表1-单链表
LeetCode--链表1-单链表 单链表模板 初始化 头部插入 尾部插入 删除节点 Index插入 Index返回对应的节点指针和val值 class MyLinkedList { private: ...
- js判断PC端还是移动端的代码小坑
我在写官网的时候做了pc和移动端两个,在通过网上查找了这样的代码,看着完全没问题,等放进去页面中后,PC端页面一直刷新,根本停不下来,找了类似js还是同样的问题.通过不断尝试后才发现,问题就是多了一行 ...
- 前端javascript知识(一)
介绍一下 JS 的基本数据类型. Undefined.Null.Boolean.Number.String 介绍一下 JS 有哪些内置对象. Object 是 JavaScript 中所有对象的父对象 ...
- ubuntu16.04 + caffe + SSD 硬件配置
搞了几个月,终于把SSD试通了,不是科班出身的就是弯路多啊.几个月才跑通了caffe + ssd,痛苦至极,好在柳暗花明.好了,废话不多说,入正题. SSD作为object detection的论文, ...
- FSBPM流程引擎(002)之表单+自定义流程挂载到引擎
本章节介绍如何将实际业务的表单和自定义流程挂载到FSBPM流程引擎上. 首先进入引擎交互界面: 点击创建:->出差申请 然后根据实际的业务输入对应的数据项即可,比如[姓名,部门,开始时间,结束时 ...
- php通过单例模式使一个类只能创建一个对象。
单例模式也就是一个类只能创建出一个对象 首先你要知道它的基本思想为:三私一公! 何为三私一公? 1(私).防止用户通过构造方法创建对象,因此私有化构造方法. 2(公).创建一个公共静态函数用来进入 ...
- 将python的字典格式数据写入excei表中
上面的为最终结果 import requests import re import xlwt import json # 导入必须的包: xlwt,json,requests,re. headers ...