ホームページ > ウェブフロントエンド > htmlチュートリアル > Codeforces Round #234 (Div. 2):B. Inna と Candies の新しいマトリックス_html/css_WEB-ITnose

Codeforces Round #234 (Div. 2):B. Inna と Candies の新しいマトリックス_html/css_WEB-ITnose

WBOY
リリース: 2016-06-24 12:01:50
オリジナル
1179 人が閲覧しました

B. Inna と新しいキャンディーの行列

テストごとの制限時間

1 秒

テストごとのメモリ制限

256 メガバイト

入力

標準入力

出力

標準出力

インナはお菓子と「キャンディ マトリックス」というゲームが好きです。今日、彼女は新しいゲーム「Candy Matrix 2: Reload」を思いつきました。

新しいゲームのフィールドは、サイズ n?×?m の長方形テーブルです。表の各行には、ドワーフの置物が入ったセルが 1 つ、キャンディが入ったセルが 1 つあり、行の他のセルは空です。ゲームは数手続きます。各移動中に、プレイヤーはドワーフがキャンディーのあるセル上にないマトリックスのすべての行を選択し、「行こう!」と叫ぶ必要があります。その後、選択したラインのすべてのドワーフが同時に右に移動し始めます。 1 秒ごとに、各ドワーフは現在のセルの右側にある隣接するセルに移動します。この動きは、次のいずれかのイベントが発生するまで続きます。

選択した行の 1 つのドワーフが、その行の右端のセルに配置されます。
  • 選択した行の中のドワーフがキャンディーのあるセルにいます。
  • このゲームのポイントは、すべてのドワーフをキャンディーセルに移動することです。

    インナは素晴らしいです、とても面白いゲームを思いついたのです。しかし、あなたはどうでしょうか?あなたの仕事は、このゲームを最適にうまくプレイすることです。具体的には、指定されたゲーム フィールドによって、プレイヤーがゲームのゴールに到達するために必要な最小手数を指定する必要があります。

    入力

    入力の最初の行には、2 つの整数 n と m (1?≤?) が含まれます。 n?≤?1000; 2?≤?m?≤?1000)。

    次の n 行にはそれぞれ m 文字が含まれますか? 「Candy Martix 2: Reload」のゲームフィールド。文字「*」はフィールドの空のセルを表し、文字「G」は小人を表し、文字「S」はキャンディーを表します。マトリックスには他の文字は含まれません。各行に文字 "G" と "S" が 1 つずつ含まれることが保証されています。

    出力

    1 行に 1 つの整数を出力します。ゲームの目的を達成するために必要な最小の手数、または指定されたゲーム フィールドで目的を達成できない場合は -1 のいずれかです。

    サンプル テスト

    入力

    3 4*G*SG**S*G*S
    ログイン後にコピー

    出力

    入力

    1 3S*G
    ログイン後にコピー
    出力

    -1开始题意理解错了,以为只要一行有个G到了S就停止,记录经过多少个S。。。额。。英语渣真心无脑脑补。。2333333。。。<pre class="n"><p></p><p>题目意思:给n*m的方格,每行中都且仅有一个方格含S和G,每一步可以使所有的G向右移,只到发生下列情况:</p><p>1、某个G已到了最后一列。</p><p>2、某个G已到了S。求把所有的G已到S需要的最少的步数。 </p><p>解题思路:</p><p>统计S-G差出现的个数。</p><p>因为两个差相等的话,他们会一起到达S。也就不要算额外的步数。</p>
    ログイン後にコピー



    #include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<algorithm>#include<vector>using namespace std;const int N = 1020;int n , m;int a, b;int s[N];char str[N][N];int flag;int ans;int main(){    while( scanf("%d%d", &n, &m)!=EOF )    {        int flag = 0;        memset( s, 0, sizeof(s) );        ans = 0;        for(int i=0; i<n; i++)        {            scanf("%s", str[i]);            for(int j=0; j<m; j++)            {                if( str[i][j]=='G' )                    a = j;                if(  str[i][j]=='S' )                    b = j;            }            if( a<b )                s[ b-a ]++;            else                flag=1;        }        for( int i=0; i<m; i++ )        {            if( s[i] )                ans++;        }        if( flag )            printf("-1\n");        else            printf("%d\n", ans);    }    return 0;}
    ログイン後にコピー







    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート