小希練打字

急著禿頭發表於2020-12-15

小希練打字

嗐,C++上完一週了,OJ系統還沒怎麼寫,菜雞表示很迷嗚嗚嗚,大晚上在此上傳一道比較基礎的題,其實就想玩一下這個功能哈哈哈
還是挺麻煩哈,,,,

【問題描述】

小希打字太慢了,因此他在苦練打字技巧。他用了一個教學 App,可以一個個顯示自己打出來的英文單詞。

當小希輸入一個詞時,他需要花0.2 秒輸入第一個字母。而對於接下來的每個字母,如果在標 準指法下和前一個字母使用同側手輸入,則需要 0.4 秒;否則只需 0.2 秒。輸入一個詞所需的時間 為輸入每個字母所需時間之和。不過,如果小希之前練過這個詞,那麼所需的時間可以降為初次 輸入時的一半。

小希輸入的內容只包含26個英文字元(區分大小寫),字元要求按照標準指法規定輸入,其中"qwertasdfgzxcvb"這15個字元為左手字元,“yuiophjklnm”這11個字元為右手字元。

給定小希在練習中依次輸入的詞,請計算小希的總耗時。

【輸入形式】

每組資料的第一行包含一個整數 N。接下來 N 行,每行包含一個字串,代表小希輸入的詞。

【輸出形式】

對於每組資料,輸出一行,包含一個整數,代表小希的總耗時,單位為十分之一秒。

【樣例輸入】

5
fdjkd
dFjdk
dfD
fdjkd
KkJjk
【樣例輸出】

61

以下為程式碼

include <iostream>
include <string>
using namespace std;
bool side(char x){
	string z="qwertasdfgzxcvbQWERTASDFGZXCVB";
	for(int i=0;i<30;i++){
		if(x==z[i]) return 1;
	}
	return 0;//0就是右側,1就是左側 
}
int sim(string a[],int m){
	for(int i=0;i<m;i++){
		if(a[i]==a[m]&&(i!=m))
		return i;
	}
	return -1;
}
int main(){
	//輸入
	int n;
	cin>>n;
	string a[n];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	//判斷 1.是否之前練過 2.每個字母是否和前一個字母同側 
	int time[n];
	time[n]={0};
	for(int i=0;i<n;i++){
		int x=sim(a,i);
		if(x!=-1){
			time[i]=time[x]/2;
		}
		else {
		time[i]=2;
		for(int j=1;j<a[i].length();j++){
			if(side(a[i][j])==side(a[i][j-1])){
				time[i]+=4;
			}
			else time[i]+=2;
		}
	}
	}
	int sum=0;
	for(int i=0;i<n;i++){
		sum+=time[i];
	}
	cout<<sum;
	return 0;
}

相關文章