zoukankan      html  css  js  c++  java
  • Codeforces 219C Color Stripe(思维+字符串)

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

    题目大意:

    给出一个字符串,只包含k种字符,问最少修改多少个字符(不增长新的种类)能够得到一个新的字符串,这个字符串满足相邻的字符没有相同的。
    解题思路:
    k=2时:
    字符串只能是ABABAB.....或者BABABA.....两种都枚举一下即可。
    k>2时:
    若有奇数个相同,如AAAAA则可变为ABABA的形式即可。
    若有偶数个相同,如AAAAAA则变为ABABAC的形式即可,C保证与后一个不同。

    代码

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<string>
     5 #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
     6 using namespace std;
     7 const int N=5e5+5;
     8 
     9 int dp[N][28];
    10 
    11 int main(){
    12     FAST_IO;
    13     int n,k;
    14     string str,s1,s2;
    15     cin>>n>>k;
    16     cin>>str;
    17     s1=str,s2=str;
    18     int ans=0,sum=0;
    19     if(k==2){
    20         for(int i=0;i<n;i++){
    21             if(i%2&&s1[i]!='A')
    22                 sum++,s1[i]='A';
    23             else if(i%2==0&&s1[i]!='B')
    24                 sum++,s1[i]='B';
    25         }
    26         ans=sum;
    27         sum=0;
    28         for(int i=0;i<n;i++){
    29             if(i%2&&s2[i]!='B')
    30                 sum++,s2[i]='B';
    31             else if(i%2==0&&s2[i]!='A')
    32                 sum++,s2[i]='A';
    33         }
    34         ans=min(ans,sum);
    35         cout<<ans<<endl;
    36         if(ans==sum)
    37             cout<<s2<<endl;
    38         else
    39             cout<<s1<<endl;
    40     }
    41     else{
    42         for(int i=1;i<n;i++){
    43             if(str[i]==str[i-1]){
    44                 ans++;
    45                 for(int j=0;j<k;j++){
    46                     if(i!=n-1){
    47                         if('A'+j!=str[i-1]&&'A'+j!=str[i+1]){
    48                             str[i]='A'+j;
    49                             break;
    50                         }
    51                     }
    52                     else{
    53                         if('A'+j!=str[i-1]){
    54                             str[i]='A'+j;
    55                             break;
    56                         }
    57                     }
    58                 }
    59             }
    60         }
    61         cout<<ans<<endl;
    62         cout<<str<<endl;
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    IDEA开发 Scala 项目
    mvn编译时绕过本地jar去maven仓库下载问题
    三角化(转载)
    分布式文件服务器介绍(转载)
    VSCode 设置侧边栏字体大小
    libLas编译
    OSG编译
    vcpkg.exe安装与应用
    OpenCASCADE编译
    gl2ps编译
  • 原文地址:https://www.cnblogs.com/fu3638/p/9892220.html
Copyright © 2011-2022 走看看