您的位置:首页 > 其它

codeforces 180C Letter

2016-09-07 00:10 302 查看
给一个包含大小写字符的字符串,让你每次将一个字符的大小写转换,问最少操作几次才能使得字符串是一些大写字母在前+一些小写字符在后的情况

首先预处理出f[i]表示前i个字符中,小写字符的数目,然后o(n)枚举大小写字符的分界线,同时计算并更新答案即可

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define rep(i, j, k) for(int i = j; i <= k; i++)

using namespace std;

int main ()
{
char s[100009];
scanf ("%s", s);
int n = strlen (s), f[100090] = {0}, ans = 0x7fffffff;
f[0] = (s[0] < 'a');
rep (i, 1, n - 1)
f[i] = f[i - 1] + (s[i] < 'a');
rep (i, 0, n - 1)
{
int l, r;
if (i)
l = i - f[i - 1];
else
l = 0;
r = f[n - 1] - f[i];
ans = min (ans, l + r);
}
cout << ans << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: