UVa 12261 High Score (贪心&“向左走,向右走”)

2014-11-24 02:30:34 · 作者: · 浏览: 1
思路:注意名字中有若干个A的情况,这时对每串连续的A进行“向左走,向右走”的判断,取所有情况中的最小值输出即可。
完整代码:
/*0.016s*/  
  
#include  
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);  
    }  
}