啊这
感觉不太可做
观察性质,发现这个字符串只由ABC构成
这个性质必须利用
仅仅由3种字符组成意味着什么呢?
这个字符串只有种可能性
这个有什么用呢?
只是说明暴力枚举的时间复杂度会小一些而已。
不止是这些。

首先有一些的性质

1.如果这个栈的顶端和当前的字符是一样的,那么肯定是直接取出来的
2.如果这个栈的第二的字符和当前的字符是一样的,那么先弹出一个然后输出肯定是不会不优
3.必定存在一个转折点,这个转折点前的决策方法如上,这个转折点后的决策方法是一直弹出知道这个字符被找到然后在输出,因为栈中的字符一定是3个字符在循环,所以每次最多就只会有400个字符
我们枚举这个转折点, 然后在暴力按照上面的方法进行模拟,是

这个比普通的暴力优秀的原因就是因为他枚举了一个关键——转折点
这个其实才是最重要的性质

这个我会给出证明。

考虑一个序列S​,对于一个没有转折点的模拟方法,那么在最后可能会在栈中留下很多的字符,这些肯定是要最后弹出的,我们就先忽略掉弹出的花费,因为在这两种情况中,最后弹出的花费是一样的。

在最后,如果在这个栈里面有很多的数,我们在后面加数的话,就必定是要1到3的花费,而如果我们只是弹出的话,只需要1即可。说明在可以的情况下,弹出数字来寻找数字,是要比加入更优秀的。

那么,为什么不可以弹出寻找后在继续加入,然后在弹出呢?(即是有多个转折点)
在中间的时候如果要弹出来寻找的话,那么就是如上面所说的情况1,和2,肯定是这两种决策更优的。

所以,肯定有且仅有一个转折点。

然后直接按照这种进行枚举就行了

code

//加油
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll read()
{
char c=getchar();ll a=0,b=1;
for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;
return a*b;
}
char c[1001];
int n,m,ans=INT_MAX,len,a[10001],q[100001];
void work(int mid)
{
int sum=0,top=0;
for(int j=1;j<=mid;j++)
{
if(top>=1&&a[j]==q[top])sum++;
else
if(top>=2&&a[j]==q[top-1])top--,sum+=2;
else
q[++top]=a[j],sum+=2;
}
for(int j=mid+1;j<=len;j++)
{
while(top&&q[top]!=a[j])sum++,top--;
if(top==0)sum+=2;
sum++;
}
ans=min(ans,sum+top);
}
int main()
{
freopen("letter.in","r",stdin);
freopen("letter.out","w",stdout);
string s;
cin>>s;
for(int i=0;i<s.size();i++)
a[i+1]=s[i]-'A'+1;
len=s.size();
for(int i=1;i<=len;i++)
{
work(i);
}
cout<<ans<<endl;
return 0;
}

至于怎么想到这中做法的,其实还是性质的分析,如果能够想到这种转折点的证明,那么就应该只能够比较顺理成章的想到这种方法。
转折点其实就是关于贡献的一种性质,在思考利用最后的栈中的数的时候应该能够想到。

这种题目我是第一次遇到,栈和字符串的结合。主要还是思考决策的方法,然后对其进行一定的利用。
但是存在特殊的情况的题目比较的常见,想这种字符串只由ABC组成的。还有上次我遇到的线段树的题目,a[i]<1000,操作是求区间的所有的子区间的异或和的和,存在异或这种与只与二进制有关的操作。
都是对于题目特殊性质的应用。

这种就是要去思考这种特殊的性质要什么效果和使用方法就可以想到正解了

一次考试的T3的更多相关文章

  1. [考试反思]0908NOIP模拟测试40:颠簸

    怎么说呢?好像也没什么可说的. 把我的优缺点都表现出来了的一场考试. T3是个小的dp想出来就能打,打出来就能A.我上来过了一遍题目觉得T3最简单(然而也并不是很简单) 然后就开始打,交,其实已经A了 ...

  2. NOIP模(ka)拟(chang)测试30 考试报告

    应得分:300 实得分:210 毒瘤卡常出题人,卡掉90分! T1 Return 开个副本数组sort一下,unique去重就可以啦.时间复杂度$ O(nlog2(n)) $ T2 One 其实就是约 ...

  3. BZOJ2460 [BeiJing2011]元素

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越 ...

  4. noip前集训

    10.18 关网了,2333 上午考试,130 rank16 一直在刚T2的割点,却直接弃了一道第一眼看上去不可做但实际并没那么难想的小模拟 但是T2没搞出来是不是也要反思一下,先是割点板子忘了,之后 ...

  5. P3000 [USACO10DEC]牛的健美操Cow Calisthenics

    题目描述 Farmer John continues his never-ending quest to keep the cows fit by having them exercise on va ...

  6. 六省联考2017 Day1

    目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...

  7. 洛谷P3368 树状数组2 树状数组+差分

    正解:树状数组+差分 解题报告: 戳我! 不得不说灵巧真滴是越来越弱了...连模板题都要放上来了QAQ 因为今天考试的T3正解要用到树状数组这才惊觉树状数组掌握得太太太太差了...之前一直靠线段树续着 ...

  8. 最短路【bzoj1726】: [Usaco2006 Nov]Roadblocks第二短路

    1726: [Usaco2006 Nov]Roadblocks第二短路 Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她 ...

  9. CF895 E. Eyes Closed(线段树 期望)

    题意 Sol 今天考试的T3,,我本来留了一个小时去写.但是T2一刚就刚了两个小时 最后也没来的及写.. 然后考完 开始写,,25min就A了.. 感觉自己太高估自己的思维,太低估自己的码力了... ...

  10. NOIP退役记

    10.10 想着自己再过一个月就要退役了,真叫人心酸.想到徐志摩的诗: "悄悄地,我走了,正如我悄悄的来,我挥一挥衣袖,不带走一片云彩." 学了这么久的OI,感觉真的就像诗里讲的一 ...

随机推荐

  1. SQL SERVER 拼接字符串转化为表结构数据

    本文为一些需要对特殊符号分隔的字符串进行解析,比如将 select '10,20,30,40,50,60' 这个字符串转化为一列多行 下面提供源代码: 1 SET QUOTED_IDENTIFIER ...

  2. HTB靶场之Sandworm

    准备: 攻击机:虚拟机kali. 靶机:Sandworm,htb网站:https://www.hackthebox.com/,靶机地址:https://app.hackthebox.com/machi ...

  3. [Spring+SpringMVC+Mybatis]框架学习笔记(四):Spring实现AOP

    上一章:[Spring+SpringMVC+Mybatis]框架学习笔记(三):Spring实现JDBC 下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(五):SpringA ...

  4. 【MAUI Blazor踩坑日记】1.关于图标的处理

    前言 本系列文章,默认你已经踏上了MAUI Blazor的贼船,并且对MAUI Blazor有了一些了解,知道MAUI是什么,知道Blazor是什么. 不会教你怎么写MAUI Blazor的项目,只是 ...

  5. C#中using的三种用法

    1. 对命名空间的引用 引入命名空间,在使用类时可以省略复杂的前缀,类似于Java的import. using System.Text; 顺便提一句,C#10新特性支持全局using,如果关键字 gl ...

  6. linux top中 VSS,RSS,PSS,USS 4个字段的解读

    参考文章:linux中top命令 VSS,RSS,PSS,USS 四个内存字段的解读

  7. JavaWeb和MVC三层架构

    JavaWeb 概述 网站发布和部署一定要依托技术语言吗: 不一定,一个网站可以直接发布和部署,因为因为浏览器能够识别网页只需要两样东西,网络和静态页面,还有一个装在他们的容器,比如 nginx. 静 ...

  8. 【LaTeX】制作 PPT(更新中)

    目录 Beamer 模板 特性 frame 与 slide \pause itemize 中的尖括号 <strat-end> 参考资料 Beamer 模板 PPT 推荐用 Beamer 模 ...

  9. Flutter系列文章-Flutter应用优化

    当涉及到优化 Flutter 应用时,考虑性能.UI 渲染和内存管理是至关重要的.在本篇文章中,我们将通过实例深入讨论这些主题,展示如何通过优化技巧改进你的 Flutter 应用. 代码性能优化 1. ...

  10. Java并发(十五)----synchronized解决共享的问题

    为了避免临界区的竞态条件发生,有多种手段可以达到目的. 阻塞式的解决方案:synchronized,Lock 非阻塞式的解决方案:原子变量 此次介绍使用阻塞式的解决方案:synchronized,来解 ...