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;
}
首先预处理出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;
}
相关文章推荐
- Codeforces 180C Letter【dp】
- CodeForces 180C Letter
- Codeforces 379D - New Year Letter
- CodeForces 43B Letter
- codeforces Letter
- 【codeforces 379D】New Year Letter
- CodeForces 379 D. New Year Letter
- codeforces 180C C. Letter(dp)
- CodeForces-4A-Letter
- CodeForces 379 D. New Year Letter
- CodeForces - 43B Letter
- CodeForces 234Div2
- codeforces 128B. String
- codeforces_676D. Theseus and labyrinth(bfs)
- codeforces733E LCA在线
- codeforces 798C - Mike and gcd problem 贪心
- CodeForces - 863B Kayaking 暴力枚举
- Codeforces 196 D. The Next Good String
- CodeForces 527C(set大法好)
- codeforces 355(Div 2)C. Vanya and Label(思维,预处理)