洛谷 P5587 打字練習

2021-10-10 07:14:38 字數 2178 閱讀 3648

題目描述

r 君在練習打字。

有這樣乙個打字練習**,給定乙個范文和輸入框,會根據你的輸入計算準確率和打字速度。可以輸入的字元有小寫字母、空格和 .(英文句號),輸入字元後,游標也會跟著移動。

輸入的文字有多行,r 君可以通過換行鍵來換行,換行後游標移動到下一行的開頭。

r 君也可以按退格鍵(為了方便,退格鍵用 < 表示),以刪除上乙個打的字元,並將游標回移一格。特殊的,如果此時游標已經在一行的開頭,則不能繼續退格(即忽略此時輸入的退格鍵)。

逐行比較,即對於范文和輸入的每一行依次比較,不同行之間不會產生影響,多餘的行會被忽略。

逐位比較,即對於兩行的每乙個字元依次比較,當且僅當字元相同時才會被算作一次正確,否則會被算作錯誤。計算答案時,只統計相同的字元個數。

需要注意的是,回車鍵不會被計入正確的字元個數。

r 君看到**上顯示他花了 t 秒完成了這次的打字遊戲,請你計算出他的 kpm(keys per minutes,每分鐘輸入的字元個數),答案四捨五入保留整數部分。

輸入格式

r 君會依次告訴你**的范文,他的輸入和花費的時間。

其中范文和輸入將會這樣讀入:給定若干行字串,以單獨的一行 eof 結束,其中 eof 不算入輸入的文字。

最後一行乙個整數 t,表示他打字花費了 t 秒。

可以參考樣例輸入輸出檔案和樣例解釋輔助理解。

輸出格式

一行乙個整數,表示 kpm。

輸入輸出樣例

輸入 #1

hello world.

aaabbbb

xeof

heelo world.

aaacbbbb

yeof60

輸出 #1

18
說明/提示

樣例解釋

第一行的正確字元數為 11。

第二行的正確字元數為 6,錯誤的字元 c 仍會佔據乙個位置。

第三行的正確字元數為 1,r 君使用退格鍵刪除了被打錯的字元 y

資料範圍

對於 20% 的資料,不存在換行鍵。

對於 40% 的資料,不存在退格鍵。

對於 100% 的資料,t≤1e3

,保證每個文字段的總字元數(包括換行)不超過 1e5個且總行數不超過 1e4。

思路:

#include

#include

#include

using

namespace std;

string a[

100001

], b[

100001];

// a是第乙個樣本,b是第二個樣本。

int num =

0, num2 =

0, num1, sum, t;

intmain()

while(1

) cin >> t;

// 時間

int num2 =

min(num, num1)

;// 根據題面意思,比較時多餘的行被忽略,因此取num和num1的最最小值。

for(

int i =

0; i) aa[ans1]

= a[i]

[j];

// 不是退格隨著輸入往後加

ans1++;}

for(

int j =

0; j) bb[ans2]

= b[i]

[j];

ans2++;}

for(

int j =

0; j<

min(ans1, ans2)

; j++

)// 逐行比較,去掉多餘的列

}int k =

((sum*

1.0)*60

)/(t*1.0);

cout << k;

// round()四捨五入輸出。

return0;

}

P5587 打字練習

思路 我對字串掌握的並不好,所以這篇文章是借鑑另一位博主寫的,在這裡先感謝洛谷使用者ac duckling 然後,這道題難點是如何讀入以及各種特殊情況的解決,不過相信看完 大家不難理解。博主的快讀函式也很用心,建議直接閱讀博主文章 鏈結裡第乙個解法便是,因為無法單獨檢視 include includ...

Luogu P5587 打字練習 題解

luogu p5587 打字練習 題解 眾所周知,這是一篇題解,而且是一篇黃題的題解 它來自洛谷月賽 但是做的時候題目是不是不太一樣呢 qaq 傳送門點這裡 打字遊戲,筆者寫下這篇題解,希望幫助到更多的人 很明顯思路就是你碰到乙個字元後面帶有 就不要這個字元,可以額外開個字串存下,最後複製 但是仔細...

洛谷 P1174 打磚塊

題目鏈結 題解 一道dp好題。include include using namespace std int a 210 210 s1 210 210 s2 210 210 dp1 210 210 dp2 210 210 n,m,k bool vis 210 210 int main for int...