UVa 12261 High Score:贪心&“向左走,向右走”2014-07-25
12261 - High Score
Time limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=onlinejudge&Itemid=99999999&category=244&page=show_problem&problem=3413思路:注意名字中有若干个A的情况,这时对每串连续的A进行“向左走,向右走”的判断,取所有情况中的最小值输出即可。完整代码:
/*0.016s*/#include<bits/stdc++.h>using namespace std;char str[1001];int main(){int t, sum, len, i, j, ans;scanf("%d
", &t);while (t--){gets(str);sum = 0, len = strlen(str);for (i = 0; i < len; ++i)sum += min(str[i] - "A", 26 - (str[i] - "A"));ans = sum + len - 1;for (int i = 1; i < len; i++){if (str[i] == "A"){for (j = i + 1; j < len && str[j] == "A"; ++j);ans = min(ans, sum + min(((i - 1) << 1) + len - j, ((len - j) << 1) + i - 1));}}printf("%d
", ans);}}
作者:csdn博客 synapse7