Codeforces Round #327 (Div. 2) B. Rebranding C. Median Smoothing

简介:
 B. Rebranding

The name of one small but proud corporation consists of n lowercase English letters. The Corporation has decided to try rebranding — an active marketing strategy, that includes a set of measures to change either the brand (both for the company and the goods it produces) or its components: the name, the logo, the slogan. They decided to start with the name.

For this purpose the corporation has consecutively hired m designers. Once a company hires the i-th designer, he immediately contributes to the creation of a new corporation name as follows: he takes the newest version of the name and replaces all the letters xiby yi, and all the letters yi by xi. This results in the new version. It is possible that some of these letters do no occur in the string. It may also happen that xi coincides with yi. The version of the name received after the work of the last designer becomes the new name of the corporation.

Manager Arkady has recently got a job in this company, but is already soaked in the spirit of teamwork and is very worried about the success of the rebranding. Naturally, he can't wait to find out what is the new name the Corporation will receive.

Satisfy Arkady's curiosity and tell him the final version of the name.

Input

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 200 000) — the length of the initial name and the number of designers hired, respectively.

The second line consists of n lowercase English letters and represents the original name of the corporation.

Next m lines contain the descriptions of the designers' actions: the i-th of them contains two space-separated lowercase English letters xiand yi.

Output

Print the new name of the corporation.

Sample test(s)
input
6 1
police
p m
output
molice
input
11 6
abacabadaba
a b
b c
a d
e g
f a
b b
output
cdcbcdcfcdc
Note

In the second sample the name of the corporation consecutively changes as follows:

 
   一道想法题目:无非就是字符 x 最后映射成了另一个字符 y,操作的也就是a,b,c,d...z这26个字符。初始化ch[i]存放的是第i个字符, pos[i]=i,记录第i个字符的位置。那么 a<->b互换,也就是在ch[]中交换a,b两个字符的位置(通过pos[a-'a'] 和 pos[b-'a']找到),并同时交换pos[]的值。最终ch[i]表示字符i+'a'映射的字符。
复制代码
#include<iostream> 
#include<cstdio>
#include<map>
#define N 200005
using namespace std;
char str[N];
int pos[30], ch[30];

int main(){
    int n, m;
    scanf("%d%d%s", &n, &m, str);
    getchar();
    for(int i=0; i<26; ++i)
        pos[i] = ch[i] = i;
    char s[4];
    while(m--){
        gets(s);
        if(s[0] == s[2]) continue;
        swap(ch[pos[s[0]-'a']], ch[pos[s[2]-'a']]);
        swap(pos[s[0]-'a'], pos[s[2]-'a']);
    }
    for(int i=0; i<n; ++i)
        printf("%c", ch[str[i]-'a']+'a');
    printf("\n");
    return 0;
}
复制代码

 

                                   C. Median Smoothing

A schoolboy named Vasya loves reading books on programming and mathematics. He has recently read an encyclopedia article that described the method of median smoothing (or median filter) and its many applications in science and engineering. Vasya liked the idea of the method very much, and he decided to try it in practice.

Applying the simplest variant of median smoothing to the sequence of numbers a1, a2, ..., an will result a new sequence b1, b2, ..., bnobtained by the following algorithm:

  • b1 = a1, bn = an, that is, the first and the last number of the new sequence match the corresponding numbers of the original sequence.
  • For i = 2, ..., n - 1 value bi is equal to the median of three values ai - 1, ai and ai + 1.

The median of a set of three numbers is the number that goes on the second place, when these three numbers are written in the non-decreasing order. For example, the median of the set 5, 1, 2 is number 2, and the median of set 1, 0, 1 is equal to 1.

In order to make the task easier, Vasya decided to apply the method to sequences consisting of zeros and ones only.

Having made the procedure once, Vasya looked at the resulting sequence and thought: what if I apply the algorithm to it once again, and then apply it to the next result, and so on? Vasya tried a couple of examples and found out that after some number of median smoothing algorithm applications the sequence can stop changing. We say that the sequence is stable, if it does not change when the median smoothing is applied to it.

Now Vasya wonders, whether the sequence always eventually becomes stable. He asks you to write a program that, given a sequence of zeros and ones, will determine whether it ever becomes stable. Moreover, if it ever becomes stable, then you should determine what will it look like and how many times one needs to apply the median smoothing algorithm to initial sequence in order to obtain a stable one.

Input

The first input line of the input contains a single integer n (3 ≤ n ≤ 500 000) — the length of the initial sequence.

The next line contains n integers a1, a2, ..., an (ai = 0 or ai = 1), giving the initial sequence itself.

Output

If the sequence will never become stable, print a single number  - 1.

Otherwise, first print a single integer — the minimum number of times one needs to apply the median smoothing algorithm to the initial sequence before it becomes is stable. In the second line print n numbers separated by a space  — the resulting sequence itself.

Sample test(s)
input
4
0 0 1 1
output
0
0 0 1 1
input
5
0 1 0 1 0
output
2
0 0 0 0 0
Note

In the second sample the stabilization occurs in two steps: , and the sequence 00000 is obviously stable.

 

构造题目:如果a[i]==a[i+1]那么a[i]和a[i+1]都是stable的数字,通过stable的数字将原串分成多个串Si,形如0101(或1010), 01010(10101) 。

原串最终成为stable的次数,也就是子串Si成为stable变换次数的最大值。那么如何计算子串Si成为stable的次数呢?其实找一下规律就好了!

0101.....10,这样的序列,区间为[l, r], a[l]==a[r]最终变成稳定序列 0000...00。变换的次数为(r-l+1)/2;

0101.....01,这样的序列,区间[l, r], a[l]!=a[r]最终变成稳定序列0000.....1111。0和1各占一半。变换的次数为(r-l+1)/2 -1。

复制代码
#include<iostream>
#include<cstdio>
#define N 500005
using namespace std;
int a[N];
int main(){
    int n;
    scanf("%d", &n);
    for(int i=1; i<=n; ++i)
        scanf("%d", &a[i]);
    int ans = 0;
    for(int i=1; i<=n;){
        int j = i;
        while(j+1<=n && a[j]!=a[j+1])
            ++j;
        //[i, j]这段区间需要作调整, 其中第i个位置和第j个位置的数字已经是stable
        int len = j-i+1;
        if(a[i] == a[j]) {//形如01010
            for(int k=i+1; k<=j; ++k) 
                a[k] = a[i];
            ans = max(ans, len/2);
        } else {//形如 010101
            int k;
            for(k=i+1; k<=(i+j)/2; ++k)
                a[k] = a[i];
            for(k; k<j; ++k)
                a[k] = a[j];
            ans = max(ans, len/2-1);
        } 
        i = j+1;
    }
    printf("%d\n", ans);
    for(int i=1; i<=n; ++i){
        if(i!=1) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");
    return 0;
}
复制代码









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/4928619.html,如需转载请自行联系原作者
目录
相关文章
|
11月前
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
353 58
|
小程序 JavaScript
微信小程序:页面Page和组件Component生命周期执行的先后顺序
微信小程序:页面Page和组件Component生命周期执行的先后顺序
649 0
微信小程序:页面Page和组件Component生命周期执行的先后顺序
|
消息中间件 NoSQL Java
面试官:谈谈你对IO多路复用的理解?
面试官:谈谈你对IO多路复用的理解?
149 0
面试官:谈谈你对IO多路复用的理解?
|
7月前
|
存储 JSON NoSQL
微服务——MongoDB的数据模型
MongoDB采用文档(document)作为最小存储单位,类似关系型数据库中的行,使用BSON(Binary-JSON)格式存储数据。BSON是JSON的二进制扩展,支持内嵌文档和数组,新增了如Date、BinData等特殊数据类型,具有轻量、高效、可遍历的特点,适合非结构化与结构化数据存储。其灵活性高,但空间利用率略低。BSON数据类型包括string、integer、boolean等基本类型及date、object id等扩展类型。
172 0
|
9月前
|
人工智能 算法 搜索推荐
云端问道11期方案教学-创建专属AI助手-阿里云百炼产品能力分享
阿里云百炼产品能力分享旨在帮助用户深入了解百炼的核心功能,并快速将大模型与系统结合。主要内容包括:1. 百炼的产品定位和能力简介,涵盖模型推理、应用搭建等;2. 知识检索RAG智能体的应用能力和优势,介绍其高效构建知识库的步骤及常见问题;3. 最佳落地案例实践,如宠物行业AI助手和产业分析类互联网企业的Copilot机器人。通过这些内容,用户可以全面掌握百炼在实际业务中的应用方法和效果。
308 0
|
Web App开发 前端开发
前端下载文件(Blob)的几种方式使用Blob下载文件
前端下载文件(Blob)的几种方式使用Blob下载文件
1235 0
|
人工智能 安全 Linux
​idea中使用X-ChatGPT详解
使用编程ai插件X-ChatGPT提高开发效率
381 0
|
程序员 开发工具 开发者
程序员都该知道的 Github PR 流程
程序员都该知道的 Github PR 流程
538 0
|
网络协议
Internet控制消息协议ICMP报文详解
Internet 协议的设计并非绝对可靠。这些控制消息的目的是提供有关通信环境中问题的反馈,而不是使 IP 可靠。仍然不能保证数据报将被传递或控制消息将被返回。某些数据报可能仍未送达,而没有任何丢失报告。如果需要可靠的通信,使用 IP 的更高级别的协议必须实现自己的可靠性程序。
567 0
Internet控制消息协议ICMP报文详解
|
资源调度 JavaScript
vue项目:解决v-html可能带来的XSS是跨站脚本攻击
vue项目:解决v-html可能带来的XSS是跨站脚本攻击
1806 0

热门文章

最新文章