結果
| 問題 |
No.2254 Reverse Only
|
| コンテスト | |
| ユーザー |
chro_96
|
| 提出日時 | 2023-03-24 23:49:04 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 2,000 ms |
| コード長 | 2,436 bytes |
| コンパイル時間 | 239 ms |
| コンパイル使用メモリ | 32,344 KB |
| 実行使用メモリ | 9,600 KB |
| 最終ジャッジ日時 | 2024-09-18 17:43:42 |
| 合計ジャッジ時間 | 3,434 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 47 |
ソースコード
#include <stdio.h>
int main () {
int n = 0;
int k = 0;
int a[200000] = {};
int b[200000] = {};
int res = 0;
int za[600000] = {};
int baa[600000] = {};
int cnta[200001] = {};
int cntb[200001] = {};
int is_ok = 1;
res = scanf("%d", &n);
res = scanf("%d", &k);
for (int i = 0; i < n; i++) {
res = scanf("%d", a+i);
}
for (int i = 0; i < n; i++) {
res = scanf("%d", b+i);
}
if (k >= n) {
int is_ok = 1;
for (int i = 0; i < n; i++) {
if (a[i] != b[i]) {
is_ok = 0;
}
}
if (is_ok > 0) {
printf("Yes\n");
} else if (k > n) {
printf("No\n");
} else {
int is_ok = 1;
for (int i = 0; i < n; i++) {
if (a[i] != b[n-i-1]) {
is_ok = 0;
}
}
if (is_ok > 0) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
if (k == n-1) {
int i = 1;
int j = 0;
int is_ok = 0;
for (int i = 0; i < n; i++) {
baa[i] = b[i];
baa[i+n] = a[i];
baa[i+2*n] = a[i];
}
za[0] = 3*n;
while (i < 3*n) {
while (i+j < 3*n && baa[j] == baa[i+j]) {
j++;
}
za[i] = j;
if (j == 0) {
i++;
} else {
int k = 1;
while (k < j && k+za[k] < j) {
za[i+k] = za[k];
k++;
}
i += k;
j -= k;
}
}
for (int i = n; i < 2*n; i++) {
if (za[i] >= n) {
is_ok = 1;
}
}
for (int i = 0; i < n; i++) {
baa[i] = b[n-i-1];
baa[i+n] = a[i];
baa[i+2*n] = a[i];
}
za[0] = 3*n;
i = 1;
j = 0;
while (i < 3*n) {
while (i+j < 3*n && baa[j] == baa[i+j]) {
j++;
}
za[i] = j;
if (j == 0) {
i++;
} else {
int k = 1;
while (k < j && k+za[k] < j) {
za[i+k] = za[k];
k++;
}
i += k;
j -= k;
}
}
for (int i = n; i < 2*n; i++) {
if (za[i] >= n) {
is_ok = 1;
}
}
if (is_ok > 0) {
printf("Yes\n");
} else {
printf("No\n");
}
return 0;
}
for (int i = 0; i < n; i++) {
cnta[a[i]]++;
cntb[b[i]]++;
}
for (int i = 0; i <= 200000; i++) {
if (cnta[i] != cntb[i]) {
is_ok = 0;
}
}
if (is_ok > 0) {
printf("Yes\n");
} else {
printf("No\n");
}
return 0;
}
chro_96