escape

Posted qqq1112

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了escape相关的知识,希望对你有一定的参考价值。

首先题目要求最后字典序最小的,而且只包含小写字母,因此显而易见像$a$,$b$这样的字符越在前面越好。

考虑贪心。

枚举这个字符串的每一个位置,然后再枚举小写字母$a$ ~ $z$,能换则换,就是尽量将字典序最小的换到最前面,或者退而求其次。

$code$:

 1 #include <bits/stdc++.h>
 2 #define INF 0x3f3f3f3f
 3 #define ll long long
 4 using namespace std;
 5 char s[1010];
 6 int n, cnt[150], dic[150][1010], num[1010];
 7 ll k;
 8 int main()
 9 {
10 //    freopen("escape.in", "r", stdin), freopen("escape.out", "w", stdout);
11     scanf("%d %lld %s", &n, &k, s + 1);
12     for(int i = n; i >= 1; --i) dic[s[i]][++cnt[s[i]]] = i, num[i] = cnt[s[i]];
13     for(int i = 1; i <= n; ++i)
14     {
15         if(!k) continue;
16         for(int ch = a; ch <= z; ++ch)
17         {
18             if(cnt[ch] && dic[ch][cnt[ch]] - i <= k)
19             {
20                 if(dic[ch][cnt[ch]] == i) break;//这块没加就挂……
21                 k -= (dic[ch][cnt[ch]] - i); --cnt[ch];
22                 int ddd, dd = num[i + 1]; char c, t = s[i + 1]; s[i + 1] = s[i]; s[i] = ch; ++dic[s[i + 1]][num[i]]; num[i + 1] = num[i];
23                 for(int j = i + 1; j < dic[ch][cnt[ch] + 1]; ++j) c = s[j + 1], s[j + 1] = t, t = c, ++dic[s[j + 1]][dd], ddd = num[j + 1], num[j + 1] = dd, dd = ddd;
24                 break;
25             }
26         }
27     }
28     for(int i = 1; i <= n; ++i) printf("%c", s[i]);
29     return 0;
30 }

 

以上是关于escape的主要内容,如果未能解决你的问题,请参考以下文章

即使我们正在清理输入 mysql_real_escape_string 的 SQL 注入漏洞代码

Python“string_escape”与“unicode_escape”

htmlspecialchars 和 mysql_real_escape_string 是不是可以防止我的 PHP 代码被注入?

如何使用 ANSI Escape 代码在控制台上输出彩色文本

velocity 的 escape实现

escape,encodeURI,encodeURIComponent, URLEncode, RawURLEncode, HTMLEntity, AddSlash, JSON Encode(示例代码