while文による実行時間の疑問

前提

AOJのITP1_9_A問題を解いています。
該当問題URL:https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_9_A

実現したいこと

while文を用いたプログラムを作成し、問題を解きたいです。

発生している問題・エラーメッセージ

while(1)と(while("END_OF_TEXT"))の2パターンのwhile文を用いたプログラムを作成しました。
しかし、(while("END_OF_TEXT"))の場合だと、実行時間の超過によりプログラムが強制終了されてしまいます。
なぜ、whileの中身を「1」以外の物にすると、実行時間が超過してしまうのでしょうか。
また、CIN入力によってtmpの中身を予め格納しておかないと、実行時間超過を起こすのでしょうか?
ご教示いただきたく存じます。

該当のソースコード

C++

11パターン目(while(1)の場合) 2################################ 3#include <iostream>4#include <string>5#include <algorithm>6using namespace std;7 8int main(){9 string str;10 cin >> str;11 transform(str.begin(), str.end(), str.begin(), ::tolower);12 13 int count=0;14 while(1){15 string tmp;16 cin >> tmp;17 if(tmp=="END_OF_TEXT") break;18 transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);19 if(str==tmp) count++;20 }21 cout << count << endl;22 return 0;23}24################################ 25 262パターン目(while("END_OF_TEXT")の場合)27################################ 28#include <iostream>29#include <string>30#include <algorithm>31using namespace std;32 33int main(){34 string str;35 cin >> str;36 transform(str.begin(), str.end(), str.begin(), ::tolower);37 38 int count=0;39 string tmp;40 while(tmp!="END_OF_TEXT"){41 cin >> tmp;42 transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);43 if(str==tmp) count++;44 }45 cout << count << endl;46 return 0;47}48################################ 49

試したこと

2パターン目の38行目から44行目を下記のように変更したところ、作動しました。
###############################################################
string tmp;
cin >> tmp;
while(tmp!="END_OF_TEXT"){
transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
if(str==tmp) count++;
cin >> tmp;
}
###############################################################
CIN入力によってtmpの中身を予め格納しておかないと、実行時間超過を起こすのでしょうか?

補足情報(FW/ツールのバージョンなど)

長文駄文失礼しました。
分かりにくい質問で大変恐縮ですが、ご教示いただけませんでしょうか。
何卒よろしくお願いいたします。

コメントを投稿

0 コメント