Codeforces 665C - Simple Strings

665C - Simple Strings

思路:贪心。为了保证最小改变着次数,在改变每个相邻相同的字符时,保证改变后的字符和后面也不相同。

代码

#include<bits/stdc++.h>
using namespace std;
string s;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>s;
    for(int i=1;i<s.size()-1;i++)
    {
        if(s[i]==s[i-1])
        {
            for(int j=0;j<26;j++)
            {
                if(‘a‘+j!=s[i-1]&&‘a‘+j!=s[i+1])
                {
                    s[i]=‘a‘+j;
                    break;
                }
            }
        }
    }
    if(s[s.size()-1]==s[s.size()-2])
    {
        for(int j=0;j<26;j++)
        {
            if(‘a‘+j!=s[s.size()-2])
            {
                s[s.size()-1]=‘a‘+j;
                break;
            }
        }
    }
    cout<<s<<endl;
    return 0;
}
时间: 2024-10-09 21:37:00

Codeforces 665C - Simple Strings的相关文章

[2016-04-26][codeforces][665C - Simple Strings]

时间:2016-04-26 10:11:21 星期二 题目编号:[2016-04-26][codeforces][665C - Simple Strings] 题目大意:给定一个字符串,问最少需要更改多少字符,使得相邻的字母都不一样,输出更改后的字符串 分析: 贪心,从左往右扫一遍数组,更改相同的元素即可 遇到的问题: 注意,相同元素必须更改后面那个元素才是最优的答案. 比如 aaa 这种情况只能更改中间那个 #include<iostream> #include<string>

CodeForces - 344B Simple Molecules (模拟题)

CodeForces - 344B Simple Molecules Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status Description Mad scientist Mike is busy carrying out experiments in chemistry. Today he will attempt to join three atoms into

[2016-04-27][codeforces][665D - Simple Subset]

时间:2016-04-27 15:16:14 星期三 题目编号:[2016-04-27][codeforces][665D - Simple Subset] 题目大意:给定n个数字的集合A,问子集最大能有多大,使得子集中两两之和是素数,输出大小和任一这样子集 分析: 至多一个1: 首先 从A取任意3个数 如果这3个数字中至多1个 1 由容斥原理可知,一定有两个数之和是偶数,并且这个偶数之和大于2(一定不是素数),所以答案子集中,大于1的数字至多只能有两个, 推广到整个A,就是如果A中至多含有1个

Codeforces 186A. Comparing Strings

Some dwarves that are finishing the StUDY (State University for Dwarven Youngsters) Bachelor courses, have been told "no genome, no degree". That means that all dwarves should write a thesis on genome. Dwarven genome is far from simple. It is re

CodeForces 559B Equivalent Strings

Portal: http://codeforces.com/problemset/problem/559/B 年轻时第一次cf的D题,当时直接写了个递归结果爆炸 做法大概是递归时候按字典序乱搞一下 然后就nlogn水过了 1 #include<iostream> 2 #include<algorithm> 3 #include<set> 4 #include<cstdio> 5 #include<cstdlib> 6 #include<cm

CodeForces - 985F Isomorphic Strings

假如两个区间的26的字母出现的位置集合分别是 A1,B1,A2,B2,....., 我们再能找到一个排列p[] 使得 A[i] = B[p[i]] ,那么就可以成功映射了. 显然集合可以直接hash,排序一下hash值就可以判断是否匹配了.... 虽然不知道为什么要卡19260817,但反正我是坚决不写双hash的,最后随便换了一个大模数(甚至都不是质数2333)然后就过了... Discription You are given a string s of length n consistin

[Codeforces Round #438][Codeforces 868D. Huge Strings]

题目链接:868D - Huge Strings 题目大意:有\(n\)个字符串,\(m\)次操作,每次操作把两个字符串拼在一起,并询问这个新串的价值.定义一个新串的价值\(k\)为:最大的\(k\),使得这个新串包含所有长度为\(k\)的01串(这样的字符串有\(2^k\)个) 题解:首先来证明对于任何的串,这个\(k\)的值不会超过9 若\(k=10\),由所有字符串的长度总和不超过100,因此在初始的\(n\)个串里,互不相同的长度为\(k\)的子串不超过100个.又由于每次连接最多能产生

Codeforces - 559B - Equivalent Strings - 分治

http://codeforces.com/problemset/problem/559/B 这个题目,分治就好了,每次偶数层可以多一种判断方式,判断它的时间就是logn的(吧),注意奇数层并不是直接退出!题目给了另一种相等的条件. #include<bits/stdc++.h> using namespace std; #define ll long long char s[200005]; char t[200005]; bool isequal(char *sb,int slen,cha

CodeForces - 665C

水题 : 思考含量不大,看看就ok #include <bits/stdc++.h> using namespace std; int ilen=1,ipos=0; int main() { string s; cin>>s; int len=s.length(); for(int i=0;i<len;i++) { ilen=1; ipos=i; while(s[i]==s[i+1]) { ilen++; i++; } if(ilen<=1) continue; if(