洛谷 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题 .考虑剪枝. 找找搜索要面临的维度.状态:原始木棍 ...
随机推荐
- gerrit Q&A
One or more refs/for/ names blocks change upload 原因 这是错误的原因是底层的git仓库有一些不正确的引用,通常是有些开发者使用过程中,直接推送到git ...
- JavaScript是如何工作的(一)
简评:JavaScript 是越来越受欢迎了,很多团队都在采用这些语言工作.前端.后端.嵌入式设备等等,都可以看见它的身影.虽然我们知其然,但又知其所以然吗? 大家应该都知道 JavaScript 是 ...
- 关于PHPExcel的一些资料
下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...
- 安卓权威编程指南-笔记(第23章 HTTP与后台任务)
1. 网络连接基本 //通过指定URL获取原始数据,并返回一个字节流数组. public byte[] getUrlBytes(String urlSpec)throws IOException{ / ...
- C#中使用 正则表达式 替换img中src路径但保留图片名
text = Regex.Replace(text, @"(?i)(?<=<img\b[^>]*?src=\s*(['""]?))([^'"& ...
- Python爬虫开发教程
正文 现在Python语言大火,在网络爬虫.人工智能.大数据等领域都有很好的应用.今天我向大家介绍一下Python爬虫的一些知识和常用类库的用法,希望能对大家有所帮助.其实爬虫这个概念很简单,基 ...
- 学习经典算法—JavaScript篇(一)排序算法
前端攻城狮--学习常用的排序算法 一.冒泡排序 优点: 所有排序中最简单的,易于理解: 缺点: 时间复杂度O(n^2),平均来说是最差的一种排序方式: 因为在默认情况下,对于已经排好序的部分,此排序任 ...
- 前端每日实战:60# 视频演示如何用纯 CSS 创作一块乐高积木
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qKKqrv 可交互视频 此视频是可 ...
- Iterator接口(遍历器)和for/of循环
在javascript中表示“集合”的数据结构,主要有Array,Object,Map,Set. Iterator(遍历器)接口是为各种不同的数据结构提供了统一的访问机制.任何数据结构具有Iterat ...
- 量子计算机编程(二)——QPU基础函数
第二部分主要是QPU的基础功能,第一部分就像是我们有了哪些基本的语句,第二部分就是我们能写一些简单基础的函数,一些小模块,第三部分就是他的应用了. 先来看一下一个简单量子应用的结构: 第一步,将量子态 ...