OvO http://codeforces.com/contest/909/problem/D

  CF 455 div2 D

  CF 909D

  算出模拟的复杂度之后就是一个很水的模拟题

  把字符串按照类似于行程编码的方式来表示,例如把 aaaabbccc 表示成 [4*a] [2*b] [3*c] 这样的形式([4*a] 这个用一个结构体表示)

  接下去就可以开心地敲模拟了,

  例如对于 [5*a] [4*b] [2*c] [4*b]  这样一个表,

  运行一次之后就变成了  [4*a] [2*b] [0*c] [3*b]

  然后进行压缩 变成 [4*a] [5*b]

  重点是复杂度的计算,每当你进行一次 O(1) 的操作(遍历数组,删除元素)时候,元素的总量(按 aabbc 是 个元素这样算)也会减1,所以总的复杂度是 O(n) 的,并不会超时

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm> using namespace std; const int M=1e6+44; struct Node
{
int val,num;
} q[M]; int lq;
char str[M]; void cps()
{
int k=lq;
lq=0;
for(int i=1;i<=k;i++)
if(q[i].num>0)
{
if(q[i].val==q[lq].val)
q[lq].num+=q[i].num;
else
q[++lq]=q[i];
}
} void solve()
{
int ans=0;
while(lq>1)
{
ans++;
for(int i=2;i<lq;i++)
q[i].num-=2;
q[1].num--,q[lq].num--;
cps();
}
printf("%d\n",ans);
} int main()
{
scanf("%s",str+1);
lq=strlen(str+1);
q[0].val=-1;
for(int i=1;i<=lq;i++)
q[i].val=str[i]-'a',q[i].num=1;
cps();
solve();
return 0;
}

  

最新文章

  1. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
  2. ajax知识整理
  3. n枚硬币问题(找假币)
  4. OpenCV: imshow后不加waitkey无法显示视频
  5. IOS - NSURLSession
  6. 【iCore3 双核心板_ uC/OS-III】例程八:互斥信号量
  7. leetcode: Path Sum II 迭代法
  8. DPDK中断机制简析
  9. HTTP协议中PUT/GET/POST/HEAD等介绍
  10. 轻松学习Linux之理解Shell的硬链接与软连接
  11. sql 事务处理
  12. hdu 3234 Exclusive-OR
  13. bzoj 1853: [Scoi2010]幸运数字 容斥
  14. OC面向对象的三大特征
  15. Fedora22没有i18n文件
  16. robots.txt网站爬虫文件设置
  17. Ray Through Glasses
  18. Mybatis通用Mapper
  19. Triangle(动态规划)
  20. bat实现固定时间循环抓取设备log

热门文章

  1. indows Eclipse Scala编写WordCount程序
  2. LUA的table实现
  3. 【AtCoder】AGC005
  4. 【Python基础】02_Python中变量的输入输出
  5. 适合新手的160个creakme(三)
  6. varchar、nvarchar
  7. VBA精彩代码分享-2
  8. Windows 软件使用
  9. includes()函数的用法
  10. ES6入门六:class的基本语法、继承、私有与静态属性、修饰器