結果
| 問題 |
No.1535 五七五
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2021-08-14 22:12:54 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 37 ms / 2,000 ms |
| コード長 | 1,078 bytes |
| コンパイル時間 | 1,243 ms |
| コンパイル使用メモリ | 30,080 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-05 22:57:34 |
| 合計ジャッジ時間 | 1,574 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
// yukicoder: 1535 五七五
// 2021.8.14
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int getchar_unlocked(void);
#define gc() getchar_unlocked()
int in() { // 非負整数の入力
int n = 0; int c = gc();
do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0');
return n;
}
int ins(char *s) { // 文字列の入力 スペース以下の文字で入力終了
char *p = s--;
do *++s = gc();
while (*s > ' ');
*s = 0;
return s - p;
}
int s[500005]; int N;
bool bs(int l, int r, int x) {
while (l+1 < r) {
int m = (l+r) >> 1;
if (s[m] == x) return true;
if (s[m] < x) l = m; else r = m;
}
return s[l] == x;
}
int main() {
int i, l, r, t, a, b, c;
char tmp[20];
int ans = 0;
N = in(), a = in(), b = in(), c = in();
for (i = 0; i < N; ++i) s[i+1] = s[i] + ins(tmp);
l = 0, r = 1; while (r <= N) {
while (r <= N && s[r]-s[l] < a+b+c) r++;
if (r > N) break;
while (l < r && s[r]-s[l] > a+b+c) l++;
if (s[r]-s[l] < a+b+c) continue;
if (bs(l, r, s[l]+a) && bs(l, r, s[l]+a+b)) ans++;
l++;
}
printf("%d\n", ans);
return 0;
}
bal4u