题解

题目

这道题考试的时候直接打暴力,结果暴力连样例都过不了,最后放上去一个玄学东西,骗了 \(5pts\)。

正解:

此题中我们可以看到原序列是一个环,所以我们要把它拆成一条链,那么我们需要暴力枚举每个点作为断点,这里没有什么好的优化,因为没什么特殊性质

对于每个字符,其对答案的贡献为 \(\sum_i^n\min(l_i,r_i)\) ,其中 \(l_i\) 和 \(r_i\) 为点 \(i\) 向左或向右移动到边界的步数,通过手模我们可以发现这就是点 \(i\) 到最左最右经过的另一种颜色的个数

所以此时我们能容忍的复杂度上只能再加一个 \(\mathcal O(log)\) 或者 \(\mathcal O(1)\),对于 \(\mathcal O(log)\) 我么考虑二分,但我没看出来哪里能二分,所以我去考虑 \(\mathcal O(1)\),对于 \(\mathcal O(1)\) 我们可以发现在学单调性时有这东西

所以我们考虑维护一个单调指针,对于断点顺时针移动,我们设一个分界点,分界点左侧的向左移动到做边界,右边的同理,那么我们可以发现,最有分解点就是没有一个最有交换经过它,因此这个分解点也是单调顺时针移动的。

复杂度分析,对于一个环,我们把它变成一条链,那么它的长度为 \(2n-1\) 而指针单调移动不会出这个范围,所以此复杂度为 \(\mathcal O(n)\)

目前为止,本篇题解是时间最优的一篇,空间也最小,\(1.3s\) , \(17mb\) (不开 \(\mathcal O(2)\) )。

\(AC\kern 0.4emCODE:\)

Code
#include<bits/stdc++.h>
#define ri register int
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
inline int read() {
ri x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
}
using IO::read;
namespace nanfeng{
#define int long long
#define cmax(x,y) ((x)>(y)?(x):(y))
#define cmin(x,y) ((x)>(y)?(y):(x))//常数优化
#define FI FILE *IN
#define FO FILE *OUT
static const int N=2e6+7;
int l[N],bac[N],T,ans,tl;
char col[N];
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
T=read();
for (ri z(1);z<=T;p(z)) {
scanf("%s",col+1);//读入优化
int B=0,R=0,lc=0,cnt=0,mv=0,la=0,tp=0,num=0,tot,tt,tmp=0;
int len=strlen(col+1);
for (ri i(1);i<=len;p(i)) {if (col[i]=='B') p(B);else p(R);}
char pc=B<R?'B':'R';//移动数量少的颜色,卡常
tt=cmin(B,R);tot=B+R-tt;
for (ri i(1);i<=len;p(i)) {
if (col[i]==pc) l[p(tp)]=cnt,bac[i]=tp;
else p(cnt);
}
num=tp;tl=1;
while(l[tl]<tot-l[tl]) tmp+=l[tl],p(tl),p(la);
for (ri i(tl);i<=tt;p(i)) tmp+=tot-l[i];
ans=tmp;
if (col[1]!=pc) p(mv),tmp+=(tt-la)-la;
else --la,l[tp+1]=l[1]+tot,p(num);
for (ri i(2);i<=len;p(i)) {
int k;
while((k=(l[tl]-mv))<tot-k&&tl<=num) tmp+=k-(tot-k),p(tl),p(la);
ans=cmin(ans,tmp);
if (col[i]==pc) {--la;l[tp+bac[i]]=l[bac[i]]+tot;p(num);continue;}//记得在换点时建立新的点数据
else p(mv),tmp+=(tt-la)-la;
}
printf("%lld\n",ans);
}
return 0;
}
#undef int
}
int main() {return nanfeng::main();}

NOIP 模拟 7 寿司的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. Java核心基础第4篇-Java数组的常规操作

    Java数组 一.数组简介 数组是多个相同类型数据的组合,实现对这些数据的统一管理 数组属引用类型,数组型数据是对象(Object) 数组中的元素可以是任何数据类型,包括基本类型和引用类型 数组类型是 ...

  2. WPF使用Microsoft.VisualBasic创建单例模式引起的权限降低问题

    在进行WPF开发时,总是在找更加优雅去写单例模式的代码. 很多人都喜欢用Mutex,一个App.cs下很多的Mutex,我也喜欢用. 看完<WPF编程宝典>的第七章Applicaton类后 ...

  3. fasthttp:比net/http快十倍的Go框架(server 篇)

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/574 我们在上一篇文章中讲解了 Go HTTP 标准库的实现原理,这 ...

  4. 如何统计自动化测试用例的ROI 【投入产出比/投资回报率】

    一. 自动化测试的投入有哪些? 1. 自动化测试的软件平台投入 自动化测试平台的开发时间,实施时间. 2.  自动化测试的框架开发投入+框架维护的投入 开发自动化测试脚本使用的框架,例如通过一些现有框 ...

  5. Automation Framework Design 自动化框架设计思想

    从2007年到2017年,十年内自动化测试工具层出不穷,各种工具在运用一段时间之后,各个公司都会有测试架构师对于目前的自动化测试工具进行框架定制设计. 从惠普2007年GDCC推出的的WebDrivi ...

  6. CTF-Decrypt-the-Message-writeup

    Decrypt-the-Message 题目信息: 解密这段信息! 附件: The life that I have Is all that I have And the life that I ha ...

  7. AcWing 1086. 恨7不成妻(【代码简洁】标准记忆化搜索+超详解!!)

    看到这题用循环写的dp代码瑟瑟发抖~ 数位dp一般记忆化搜索的写法思维难度较低,也比较常用,这题的简洁代码应该就可以显现出其优越性 (用时4ms,可能比用循环写的dp还要快) 那这里补充一下记忆化搜索 ...

  8. 大疆M3508、M2006必备CAN总线知识与配置方法

    使用大疆M3508.M2006的CAN总线知识与配置方法 目录 使用大疆M3508.M2006的CAN总线知识与配置方法 前言: 0x00 需要额外的CAN收发器!!! 0x01 硬件层面分析 为什么 ...

  9. PAT乙级:1076 Wifi密码 (15分)

    PAT乙级:1076 Wifi密码 (15分) 题干 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题 ...

  10. VM虚拟机桥接模式无法联网、NAT模式能正常联网

    桥接模式:使虚拟机客户机可以和主机在同一网段,这样,和主机同局域网内的其他主机就也可以ping到虚拟机了: 因此,虚拟机设置为桥接模式,这样以后就可以方便的使用虚拟机了: 有时,虚拟机为桥接模式上不了 ...