羅区の問題解決--P1042:卓球

関連するトピック

トピックリンク

羅バレー、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;
}

シミュレーションタイトル、限り書き込みコードに必要に応じて缶、おそらくいくつかのトピックもう少しコードが、支障がないことは大きな困難、ステップバイステップで、。

公開された235元の記事 ウォンの賞賛289 ビュー107万+

おすすめ

転載: blog.csdn.net/justidle/article/details/104865808