Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 7831

【AtCoder】ABC 359 B - Couples | 茶コーダーが解くAtCoder - Yuulis.log

$
0
0

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 27

問題概要

 2N人が横一列に並んでおり、左から  i番目の人は色  A_iの服を着ている。ここで、服の色は色  1, 2, \cdots, N N色であり、それぞれの色の服をちょうど2人が着ている。各  iについて、「色  iの服を着た二人の人の間にはちょうど一人いる」という条件を満たすものは何通りあるか求めよ。

制約

  • 入力はすべて整数。
  •  2 \leq N \leq 100
  •  1 \leq A_i \leq N

考察

 Nの制約が小さいので、素直に二重ループして一つずつ  iについて見ていけばよいだろう。

 i = 1, 2, \cdots, Nについて具体的には、

  •  A_j = iとなる  j j_0, j_1とし (制約よりこのような  jは必ず2つ存在する) 、 j_1 - j_0 = 2ならば答えとなるカウンターを1増やす。

とい処理をしてあげればよい。

なお、コードでは 0-indexed としている。

コード

#include <bits/stdc++.h>usingnamespacestd;

#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)// ======================================== //intmain()
{
    int N;
    cin>> N;
    vector<int> A(2 * N);
    rep(i, 0, 2 * N) cin>> A[i];

    int ans = 0;
    rep(i, 1, N + 1)
    {
        int j0 = 0, j1 = 0;
        bool flag = false;
        rep(j, 0, 2 * N)
        {
            if (A[j] == i)
            {
                if (flag)
                {
                    flag = false;
                    j1 = j;
                    break;
                }
                else
                {
                    flag = true;
                    j0 = j;
                }
            }
        }

        if (j1 - j0 == 2)
        {
            ans++;
        }
    }

    cout<< ans << endl;
}

atcoder.jp

実装時間: 5分


Viewing all articles
Browse latest Browse all 7831

Trending Articles