結果

問題 No.1053 ゲーミング棒
ユーザー 🍮かんプリン🍮かんプリン
提出日時 2020-05-15 22:44:11
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 1,634 bytes
コンパイル時間 1,453 ms
コンパイル使用メモリ 164,820 KB
実行使用メモリ 5,760 KB
最終ジャッジ日時 2024-09-19 11:56:17
合計ジャッジ時間 2,456 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 AC 1 ms
5,376 KB
testcase_04 AC 1 ms
5,376 KB
testcase_05 AC 2 ms
5,376 KB
testcase_06 WA -
testcase_07 WA -
testcase_08 AC 2 ms
5,376 KB
testcase_09 WA -
testcase_10 WA -
testcase_11 AC 1 ms
5,376 KB
testcase_12 AC 1 ms
5,376 KB
testcase_13 WA -
testcase_14 WA -
testcase_15 AC 1 ms
5,376 KB
testcase_16 WA -
testcase_17 AC 1 ms
5,376 KB
testcase_18 AC 2 ms
5,376 KB
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 AC 28 ms
5,376 KB
testcase_24 WA -
testcase_25 WA -
testcase_26 AC 34 ms
5,376 KB
testcase_27 AC 1 ms
5,376 KB
testcase_28 AC 2 ms
5,376 KB
testcase_29 AC 2 ms
5,376 KB
testcase_30 AC 18 ms
5,760 KB
testcase_31 AC 17 ms
5,376 KB
testcase_32 AC 17 ms
5,376 KB
testcase_33 AC 17 ms
5,376 KB
testcase_34 AC 16 ms
5,376 KB
testcase_35 AC 22 ms
5,376 KB
testcase_36 AC 23 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

/**
 *   @FileName	f.cpp
 *   @Author	kanpurin
 *   @Created	2020.05.15 22:44:01
**/

#include "bits/stdc++.h" 
using namespace std; 
typedef long long ll;

// KMP法 O(N)
// verify : https://atcoder.jp/contests/abc135/tasks/abc135_f
template<typename T>
class KMP {
public:
    vector<T> pattern;
    int plen;
    vector<int> table;
    // tからsを探す(sを引数に)
    KMP(const vector<T>& s) : pattern(s), plen((int)pattern.size()), table(plen + 1) {
        table[0] = -1;
        int j = -1;
        for (int i = 0; i < plen; i++) {
            while (j >= 0 && pattern[i] != pattern[j]) j = table[j];
            j++;
            if (i + 1 < plen && pattern[i + 1] == pattern[j]) table[i + 1] = table[j];
            else table[i + 1] = j;
        }
    }
    // マッチする左端の箇所
    vector<int> search(const vector<T>& text) {
        vector<int> res;
        int head = 0, j = 0, tlen = (int)text.size();
        while (head + j < tlen) {
            if (pattern[j] == text[head + j]) {
                if (++j != plen) continue;
                res.push_back(head);
            }
            head += j - table[j], j = max(table[j], 0);
        }
        return res;
    }
};
int main() {
    int n;cin >> n;
    vector<int> a(n);
    vector<int> b(2*n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        b[i] = b[i + n] = a[i];
    }
    sort(a.begin(), a.end());
    KMP<int> kmp(a);
    auto p = kmp.search(b);
    if (p.size() == 0) {
        cout << -1 << endl;
    }
    else if (p[0] == 0) {
        cout << 0 << endl;
    }
    else {
        cout << 1 << endl;
    }
    return 0;
}
0