結果
| 問題 |
No.1053 ゲーミング棒
|
| コンテスト | |
| ユーザー |
🍮かんプリン
|
| 提出日時 | 2020-05-15 22:44:11 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 WA * 13 |
ソースコード
/**
* @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;
}
🍮かんプリン