関連するトピック
トピックリンク
羅バレー、https://www.luogu.com.cn/problem/P1042。
私のOJ、http://47.110.135.197/problem.php?id=4746。
タイトル説明
中国と中国は、分析により行う、各ゲームの結果の第1のボールは、リストを使用し、2つの(レコードの終わりのような)から11点および21点満点、競争結果の下に算出しました。
たとえば、現在、レコード、(Wポイントを取得するために、中国及び中国を表し、Lは、チワワ相手がポイントを獲得表す)を有する
WWWWWWWWWWWWWWWWWWWWWWLW
ゲームの結果が第1ゲーム11 0に勝利中国、中国で11ポイントのスケールの下に、 、0は、セカンドゲーム11、進行中の第3ゲーム、11の現在のスコアを獲得します。21点満点では、この時間は、ゲームはチワワ21 0は、1~2のスコアを、進行中のセカンドゲームを最初にゲームに勝利しました。ゲームが始まったばかりならば、この時間は、スコアは0-0でした。差まで分は、ゲームの唯一の終わり2以上です。
あなたのプログラムは、出力に入力された情報(WLフォーム)のためのゲームのシリーズの正しい結果です。
入力形式
各ファイルは、文字列、大文字W、LおよびEの形式の文字列の入力複数のラインを含んでいます。Eは、ゲーム情報の終わりを表し、プログラムはE.後、すべてを無視すべきです
出力フォーマット
出力は、各部分が複数の行を有し、2つの部分から成り、(順序によってゲーム情報入力)ゲームのスコアに対応する行。第1の部分は11ポイントスケールでの結果であり、第二の部分における結果は、2つの部分の間に空白行で区切られた、21点とします。
サンプル入力
WWWWWWWWWWWWWWWWWWWW
WWLWE
サンプル出力
11:0
11:0
1:1
21:0
2:1
説明
行あたり25文字まで、2500行まで。
トピック分析
問題の意味の分析
これは、シミュレーションの質問です。文字入力は、対応するゲームのスコアを分析します。
サンプルデータ解析
入力サンプルによると、我々は、テーブルの下に全入力のシミュレーション解析結果を列挙されています。
11ポイントスコア | 21ポイントスコア | |
W | 1:0 | 1:0 |
W | 2:0 | 2:0 |
W | 3:0 | 3:0 |
W | 4:0 | 4:0 |
W | 5:0 | 5:0 |
W | 6:0 | 6:0 |
W | 7:0 | 7:0 |
W | 8:0 | 8:0 |
W | 9:0 | 9:0 |
W | 10:0 | 10:0 |
W | 11:0 | 11:0 |
W | 1:0 | 12:0 |
W | 2:0 | 13:0 |
W | 3:0 | 14:0 |
W | 4:0 | 15:0 |
W | 5:0 | 16:0 |
W | 6:0 | 17:0 |
W | 7:0 | 18:0 |
W | 8:0 | 19:0 |
W | 9:0 | 20:0 |
W | 10:0 | 21:0 |
W | 11:0 | 1:0 |
L | 0:1 | 1:1 |
W | 1:1 | 2:1 |
E |
表から、我々はスコアの変化を見ることができます。場合は、入力E、我々は必要な出力スコアに従ってください。
アルゴリズムの詳細
どのようにスコアを保存するには?
私はスコアを保存するためにSTLのキューを使用しています。メインは考えるのが面倒です。
各ラウンドの判定終了?
すなわち、ポイント差が2以上である、少なくとも二つの点に特別な注意を払うために小さなピットマージンがあります。11点以上11点、少なくとも一つ、及び2分のマージン場合には、です。同様の21点決意方法。私は、次の文言を使用します。
if ((ans1[0]>=11 || ans1[1]>=11) && abs(ans1[0]-ans1[1])>=2) {
...
}
AC参照コード
#include <iostream>
#include <queue>
#include <string>
#include <iostream>
#include <sstream>
#include <cmath>
using namespace std;
int main() {
char ch;
int ans1[2]={};//11分制比分, ans1[0]第一个人比分, ans1[1]第二人比分
int ans2[2]={};//21分制比分
queue<string> q1;//11分结果
queue<string> q2;//21分结果
while (cin>>ch) {
if ('E'==ch) {
ostringstream ostr1;
ostr1 << ans1[0] << ":" << ans1[1];
q1.push(ostr1.str());
ostringstream ostr2;
ostr2 << ans2[0] << ":" << ans2[1];
q2.push(ostr2.str());
break;
} else {
if ('W'==ch) {
//Win
ans1[0]++;
ans2[0]++;
} else if ('L'==ch) {
//Los
ans1[1]++;
ans2[1]++;
}
//统计11分制结果
if ((ans1[0]>=11 || ans1[1]>=11) && abs(ans1[0]-ans1[1])>=2) {
ostringstream ostr;
ostr << ans1[0] << ":" << ans1[1];
q1.push(ostr.str());
ans1[0] = 0;
ans1[1] = 0;
}
//统计21分制结果
if ((ans2[0]>=21 || ans2[1]>=21) && abs(ans2[0]-ans2[1])>=2) {
ostringstream ostr;
ostr << ans2[0] << ":" << ans2[1];
q2.push(ostr.str());
ans2[0] = 0;
ans2[1] = 0;
}
}
}
//输出
while (false==q1.empty()) {
cout << q1.front() << endl;
q1.pop();
}
cout << endl;
while (false==q2.empty()) {
cout << q2.front() << endl;
q2.pop();
}
return 0;
}
シミュレーションタイトル、限り書き込みコードに必要に応じて缶、おそらくいくつかのトピックもう少しコードが、支障がないことは大きな困難、ステップバイステップで、。