码迷,mamicode.com
首页 > 其他好文 > 详细

字符串处理经典题

时间:2019-07-30 16:04:11      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:检查   nbsp   lap   ems   set   algo   处理   pre   tchar   

字符串处理经典题

 

1.CF219C Color Stripe(要求修改后的串中相邻字符不相同,求最少修改次数)

Q: 给你一个长度为N 的字符串(由大写字母组成)和一个数量K,K是指可使用的不同的大写字母的个数。现要求修改源字符串,使得串中相邻的两个位置上的元素不同;一次只能更改一个字符,问你最少的修改次数是多少?并输出任意一个满足条件的答案字符串。

A:从字符串第二位开始逐个检查即可,每次维护num[i ]= SG(num[ i- 1 ],num[ i+ 1]);即可 。注意K= 2时可以特判,因为答案串只有"ABABABA...ABA"和"BABAB...BABAB"两种。

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

技术图片
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<map>
 7 using namespace std;
 8  
 9 char _sg(char a, char b)
10 {
11     int x= a- A;
12     int y= b- A;
13  
14     int ans;
15     for (int i= 0; i< 4; i ++)
16     {
17         if (i!= x&& i!= y)
18         {
19             ans= i;
20             break;
21         }
22     }
23     return (A+ ans);
24 }
25 char ss[1000010];
26 int main()
27 {
28     int n, k;
29     scanf("%d %d", &n, &k);
30     getchar();
31     scanf("%s", ss+ 1);
32     ss[0]= #;
33     int len= strlen(ss);
34     ss[len]= #;
35     len += 1;
36     int cnt= 0;
37     if (k>= 3)
38     {
39         for (int i= 2; i< len- 1; i ++)
40         {
41             if (ss[i]== ss[i- 1])
42             {
43                 ss[i]= _sg(ss[i- 1], ss[i+ 1]);
44                 cnt ++;
45             }
46         }
47     }
48     else
49     {
50         int cnt1= 0;
51         int cnt2= 0;
52         for (int i= 1; i< len- 1; i ++)
53         {
54             if (i% 2!= ss[i]- A) cnt1 ++;
55             else cnt2 ++;
56         }
57         if (cnt1<= cnt2)
58         {
59             cnt= cnt1;
60             for (int i= 1; i< len- 1; i ++)
61             {
62                 int cn= i% 2;
63                 ss[i]= A+ cn;
64             }
65         }
66         else
67         {
68             cnt= cnt2;
69             for (int i= 1; i< len- 1; i ++)
70             {
71                 int cn= (i+1)% 2;
72                 ss[i]= A+ cn;
73             }
74         }
75     }
76     printf("%d\n", cnt);
77     for (int i= 1; i< len- 1; i ++)
78     {
79         printf("%c", ss[i]);
80     }
81     printf("\n");
82     return 0;
83 }
View Code

 

字符串处理经典题

标签:检查   nbsp   lap   ems   set   algo   处理   pre   tchar   

原文地址:https://www.cnblogs.com/Amaris-diana/p/11270261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!