3PiratesHDUacmHDUACMSample Output888HintThe string “Pirates”, can type this way, Shift, p, i, r, a, t, e, s, the answer is 8.The string “HDUacm”, can type this way, Caps lock, h, d, u, Caps lock, a, c, m, the answer is 8The string "HDUACM", can type this way Caps lock h, d, u, a, c, m, Caps lock, the answer is 8思路:dpa与dpb数组分别表示cap键开关状态,在完成第i个字母的最少步骤有两种可能,在cap开和关状态,在第i-1个字母完成时,有两种可能,一种是cap键开,一种是关,每次取i-1状态步骤的最小值,最后比较两种状态下,哪一种步骤最少。
#include<stdio.h>#include<string.h>char str[110];int dpa[110],dpb[110]; //dpa[110]表示灯亮,dpb[110]表示灯灭 int Min(int a, int b) { return a > b ? b : a; }int main() { int t,i; scanf("%d",&t); getchar(); dpa[0] = 1; dpb[0] = 0; while(t--) { scanf("%s",str + 1); for(i = 1; str[i]; i++) { if(str[i] >= 'a' && str[i] <= 'z') { dpa[i] = Min(dpa[i-1] + 2, dpb[i-1] + 2);//如果灯亮,按shift+字母,灯灭,按字母+cap dpb[i] = Min(dpa[i-1] + 2, dpb[i-1] + 1);//如果灯亮,按cap+字母,灯灭,按字母 } else if(str[i] >= 'A' && str[i] <= 'Z') { dpa[i] = Min(dpa[i-1] + 1, dpb[i-1] + 2);//如果灯亮,按字母,灯灭,按cap+字母 dpb[i] = Min(dpa[i-1] + 2, dpb[i-1] + 2);//如果灯亮,按字母+cap,灯灭,按shift字母 } } printf("%d/n",Min(dpa[i-1] +1, dpb[i-1]));//灯亮着要关灭 } return 0;}
新闻热点
疑难解答