啊这
感觉不太可做
观察性质,发现这个字符串只由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. AI与健康管理:趋势与未来

    目录 引言 随着人工智能技术的不断发展,健康管理也逐渐成为了一个新的研究领域.AI技术可以为健康管理提供智能化.个性化.高效的支持,使得健康管理更加人性化和科学.本文将介绍AI与健康管理的技术原理.实 ...

  2. 将onnx的静态batch改为动态batch及修改输入输出层的名称

    目录 背景 操作 修改输入输出层 修改输入输出层名称 完整代码 背景 在模型的部署中,为了高效利用硬件算力,常常会需要将多个输入组成一个batch同时输入网络进行推理,这个batch的大小根据系统的负 ...

  3. PB从入坑到放弃(一)第一个HelloWorld程序

    前言 网上关于PowerBuilder的资料确实是少之又少. 为了方便,后面我们都用pb 来代替PowerBuilder 说到这不得不来说说自己的pb入坑经历, 自己也不是计算机科班出生. 刚到公司面 ...

  4. 你一定要用这个API管理工具,看完你就知道为什么了

    以下是经常发生在程序员之间的对话: 小张:你知道为什么程序员不喜欢写文档? 小王:因为代码就是最好的文档啊!谁还需要写那些冗长的说明呢? 小张:那你知道为什么程序员也不喜欢别人不写文档吗? 小王:当然 ...

  5. prometheus Histogram 统计原理

    大家好,我是蓝胖子,书接上文,我在prometheus描点原理那一篇文章里,留了一个思考题: 我们通常会用到histogram_quantile去计算服务接口时间的耗时情况. histogram_qu ...

  6. java学习中的一些总结

    最近java要考试了,在复习的时候就发现什么成员变量,成员函数,静态,非静态,里面的一些东西都乱七八糟的(其实是我太菜了,没有理解透彻) 我查了很多相关的资料,网上很多大佬总结的非常好 知识点一 成员 ...

  7. grafana 容器无法启动,打印权限问题

    报错日志 open /var/lib/grafana/alerting/1/notifications: permission denied 问题原因 sudo chown -R docker: /v ...

  8. 学好Linux的必经之路

    学好Linux的必经之路 学习动机的培养对于一个人学习习惯的形成有着重要的作用.当我们在学习某一个事物时,建立属于我们自己的学习方法,以此培养我们学习Linux系统的学习动机. 当前,Linux系统属 ...

  9. HTML超文本标记语言3

    三.HTML表单标签 1.form标签 <form> form标签 name=表单名称,action=表单提交的地址,method=表单提交方式:get/post get/post详解: ...

  10. 微服务性能分析工具 Pyroscope 初体验

    Go 自带接口性能分析工具 pprof,较为常用的有以下 4 种分析: CPU Profiling: CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主 ...