12261 - High Score
Time limit: 3.000 seconds
思路:注意名字中有若干个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\n", &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\n", ans);
}
}