How to Type
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 842 Accepted Submission(s): 364
題目大意:給你一個字符串,問要至少按多少次鍵盤才能打出這些字母,有大寫和小寫,可以按caps lock,也可以按shift。注意!!最後打完後,caps lock一定要是關燈的(小寫)。
#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;
char ch[105];
int on[105]; //打開大寫
int off[105]; //關閉大寫
int main()
{
int i, t, len;
scanf("%d", &t);
while(t--)
{
scanf("%s", ch);
len = strlen(ch);
off[0] = 0; //剛開始的沒開燈
on[0] = 1; //開燈的要+1
for(i = 0; i < len; i++)
{
if(ch[i] >= 'a' && ch[i] <= 'z') //小寫字母
{
//開:(開~~shift+type, 關~~type+開燈)
on[i+1] = min(on[i] + 2, off[i] + 2);
//關:(開~~lock+type, 關~~type)
off[i+1] = min(on[i] + 2, off[i] + 1);
}
else //大寫字母
{
//開:(開~~type, 關~~開燈+type)
on[i+1] = min(on[i] + 1, off[i] + 2);
//關:(開~~lock+type, 關~~shift+type)
off[i+1] = min(on[i] + 2, off[i] + 2);
}
}
on[len]++;
printf("%d\n", min(on[len], off[len]));
}
return 0;
}