题意:给定一个字符串,里面有各种小写字母和’ . ' ,无论是什么字母,都是一样的,假设遇到' . . ' ,就要合并成一个' .',有m个询问,每次都在字符串某个位置上将原来的字符改成题目给的字符,问每次须要多少次合并次数。才使字符串没有‘ .. '

思路:最原始的想法,就是对于每一次询问,都遍历整个字符串。这样时间复杂度o(n*m),就高达10^10方,非常明显会tle。

换下思路,事实上每次询问所改变的字符都会保留到下一次。也就是下一次的次数就会受到上一次的影响,那么我仅仅要就算出第一次的合并次数,以下的都能够推出来

题目链接:http://codeforces.com/problemset/problem/570/C

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
char a[300005],b[10];
int main(void)
{
scanf("%d%d",&n,&m);
scanf("%s",a+1);
scanf("%d%s",&cnt,b);
a[cnt]=b[0];//处理第一次
int ret,ans=0,flag;
for(int i=1; i<=n; i++)
{
ret=0;
flag=0;
while(a[i]=='.')//假设一个子序列全都是'.',假设有ret个'.',那么合并次数就是ret-1;
{
i++;
ret++;
flag=1;
}
if(flag) ans+=ret-1;
}
printf("%d\n",ans);
for(int i=1; i<m; i++)//处理剩余的m-1次,每一次的ans均由上一次推出
{ scanf("%d%s",&cnt,b);
char ch=a[cnt];
a[cnt]=b[0];
if(b[0]=='.'&&ch!='.')//假设这一次由字母变成'.',检查前后是否有'.',有一个的话合并次数就要+1
{
if(a[cnt-1]=='.') ans++;
if(a[cnt+1]=='.') ans++;
}
else if(b[0]!='.'&&ch=='.')//由字母变成'.'
{
if(a[cnt-1]=='.') ans--;
if(a[cnt+1]=='.') ans--;
}
printf("%d\n",ans);
}
return 0;
}

Codeforces Round #316 (Div. 2) C. Replacement的更多相关文章

  1. Codeforces Codeforces Round #316 (Div. 2) C. Replacement set

    C. Replacement Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/570/proble ...

  2. Codeforces Codeforces Round #316 (Div. 2) C. Replacement 线段树

    C. ReplacementTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/570/problem ...

  3. Codeforces Round #316 (Div. 2) C. Replacement(线段树)

    C. Replacement time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  4. Codeforces Round #316 (Div. 2C) 570C Replacement

    题目:Click here 题意:看一下题目下面的Note就会明白的. 分析:一开始想的麻烦了,用了树状数组(第一次用)优化,可惜没用. 直接判断: #include <bits/stdc++. ...

  5. Codeforces Round #316 (Div. 2) C Replacement 扫描法

    先扫描一遍得到每个位置向后连续的'.'的长度,包含自身,然后在扫一遍求出初始的合并次数. 对于询问,只要对应位置判断一下是不是'.',以及周围的情况. #include<bits/stdc++. ...

  6. Codeforces Round #316 (Div. 2)

    A. Elections time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  7. Codeforces Round #316 (Div. 2) C 思路/模拟

    C. Replacement time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  8. Codeforces Round #316 (Div. 2) (ABC题)

    A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...

  9. Codeforces Round #316 (Div. 2) B. Simple Game

    思路:把n分成[1,n/2],[n/2+1,n],假设m在左区间.a=m+1,假设m在右区间,a=m-1.可是我居然忘了处理1,1这个特殊数据.被人hack了. 总结:下次一定要注意了,提交前一定要看 ...

随机推荐

  1. The MySQL server is running with the –secure-file-priv

    show variables like '%secure%'; 将文件导出路径更改为查询到的secure-file-priv路径下 select * from table where column = ...

  2. C# 关于datetime的用法(网上考的)

    实例: 用户输入一个日期,要求输出这个日期是星期几和在这一年中的第几天: 复制代码代码如下: //声明一个DateTime类型的变量用于存放用户输入的日期DateTime dt;Console.Wri ...

  3. [LUOGU] P4290 [BZOJ] 1055 [HAOI2008]玩具取名

    题目描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母代 ...

  4. 解决SimpleDateFormat线程安全问题

    package com.tanlu.user.util; import java.text.DateFormat; import java.text.ParseException; import ja ...

  5. 12. KEY_COLUMN_USAGE

    12. KEY_COLUMN_USAGE KEY_COLUMN_USAGE表描述哪些键列具有约束. KEY_COLUMN_USAGE表有以下列: CONSTRAINT_CATALOG :约束所属目录的 ...

  6. 关于web页面优化

    简单汇总了一下web的优化方案(主要的前端优化策略) 减少http请求次数 文件合并(js.css.图片):ps:多个图片合并之后,总体积会变小 内联图片,即data:URL scheme,但容易导致 ...

  7. 第二章:systemverilog声明的位置

    1.package 定义及从package中导入定义(***) verilog中,对于变量.线网.task.function的声明必须在module和endmodule之间.如果task被多个modu ...

  8. python_函数递归

    函数递归 函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数本身 # import sys # print(sys.getrecursionlimit()) # sys.setr ...

  9. tomcat——大致简介和执行过程

    jsp简介 JSP: JAVA Server Page 使用JAVA语言编写的一种在服务器运行的动态页面 JSP = JAVA + HTML JSP 的执行过程 1: 翻译阶段 把JSP源文件翻译成 ...

  10. 比较spring cloud和dubbo,各自的优缺点是什么

    dubbo由于是二进制的传输,占用带宽会更少springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的 ...