# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
70033 | 2018-08-22T09:34:06 Z | octopuses | parentrises (BOI18_parentrises) | C++17 | 281 ms | 9624 KB |
//Giorgi Kldiashvili #include <bits/stdc++.h> #define ll long long #define fr first #define sc second #define M 1000000007 using namespace std; const int N = 1000020; int n, k; int used[N]; bool f[N]; char ch[N]; void go1() { vector < int > c; c.clear(); scanf("%s", &ch); n = strlen(ch); int A, B; A = B = 0; for(int i = 0; i < n; ++ i) { if(ch[i] == '(') A ++; if(ch[i] == ')') B ++; if(B > A * 2) { printf("impossible\n"); return; } } A = B = 0; for(int i = n - 1; i >= 0; -- i) { if(ch[i] == ')') A ++; if(ch[i] == '(') B ++; if(B > A * 2) { printf("impossible\n"); return; } } for(int i = 0; i < n; ++ i) used[i] = 0, f[i] = 0; int now = 1; for(int i = 1; i < n; ++ i) { if(ch[i] == ')') c.push_back(i); now += (ch[i] == ')')?-1:1; if(now < 0) { used[c.back()] = 1; c.pop_back(); used[c.back()] = 2; c.pop_back(); now = 0; } } now = 1; c.clear(); if(used[n - 1] == 2) now = 0; for(int i = n - 2; i >= 0; -- i) { if(used[i] == 2) continue; if(ch[i] == '(') c.push_back(i); now += (ch[i] == '(')?-1:1; if(now < 0) { used[c.back()] = 1; c.pop_back(); used[c.back()] = 2; c.pop_back(); now = 0; } } for(int i = 0; i < n; ++ i) { if(used[i] == 0) putchar('G'); if(used[i] == 1) putchar('R'); if(used[i] == 2) putchar('B'); } printf("\n"); } int A[2][305][910]; int answer[305]; void go2() { A[0][1][302] = 1; int now = 1; int pre = 0; for(int i = 2; i <= 300; ++ i) { for(int p = 1; p <= i; ++ p) { for(int q = 2; q <= 905; ++ q) { if(p * 2 < i - p) { A[now][p][q] = 0; continue; } A[now][p][q] = A[pre][p][q - 2]; if(q < 302) A[now][p][q] += A[pre][p - 1][q + 1]; if(A[now][p][q] >= M) A[now][p][q] -= M; if(q >= 303) answer[i] = (answer[i] + A[now][p][q]) % M; } if(p * 2 < i - p) continue; for(int q = 303; q <= 905; ++ q) A[now][p][302] = (A[now][p][302] + A[pre][p - 1][q]) % M; } swap(now, pre); } } int sub, T; int main() { scanf("%d", &sub); scanf("%d\n", &T); if(sub == 1) { while(T --) go1(); } else { go2(); while(T --) { scanf("%d", &n); printf("%d\n", answer[n]); } } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 248 KB | Output is correct |
2 | Correct | 2 ms | 484 KB | Output is correct |
3 | Correct | 3 ms | 624 KB | Output is correct |
4 | Correct | 2 ms | 624 KB | Output is correct |
5 | Correct | 2 ms | 624 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 624 KB | Output is correct |
2 | Correct | 3 ms | 676 KB | Output is correct |
3 | Correct | 3 ms | 676 KB | Output is correct |
4 | Correct | 2 ms | 676 KB | Output is correct |
5 | Correct | 2 ms | 676 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 624 KB | Output is correct |
2 | Correct | 3 ms | 676 KB | Output is correct |
3 | Correct | 3 ms | 676 KB | Output is correct |
4 | Correct | 2 ms | 676 KB | Output is correct |
5 | Correct | 2 ms | 676 KB | Output is correct |
6 | Correct | 3 ms | 676 KB | Output is correct |
7 | Correct | 2 ms | 676 KB | Output is correct |
8 | Correct | 2 ms | 676 KB | Output is correct |
9 | Correct | 2 ms | 676 KB | Output is correct |
10 | Correct | 2 ms | 676 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 624 KB | Output is correct |
2 | Correct | 3 ms | 676 KB | Output is correct |
3 | Correct | 3 ms | 676 KB | Output is correct |
4 | Correct | 2 ms | 676 KB | Output is correct |
5 | Correct | 2 ms | 676 KB | Output is correct |
6 | Correct | 3 ms | 676 KB | Output is correct |
7 | Correct | 2 ms | 676 KB | Output is correct |
8 | Correct | 2 ms | 676 KB | Output is correct |
9 | Correct | 2 ms | 676 KB | Output is correct |
10 | Correct | 2 ms | 676 KB | Output is correct |
11 | Correct | 3 ms | 676 KB | Output is correct |
12 | Correct | 3 ms | 748 KB | Output is correct |
13 | Correct | 3 ms | 748 KB | Output is correct |
14 | Correct | 3 ms | 748 KB | Output is correct |
15 | Correct | 3 ms | 780 KB | Output is correct |
16 | Correct | 6 ms | 796 KB | Output is correct |
17 | Correct | 9 ms | 1704 KB | Output is correct |
18 | Correct | 6 ms | 1704 KB | Output is correct |
19 | Correct | 7 ms | 1704 KB | Output is correct |
20 | Correct | 10 ms | 1704 KB | Output is correct |
21 | Correct | 39 ms | 1704 KB | Output is correct |
22 | Correct | 60 ms | 9624 KB | Output is correct |
23 | Correct | 36 ms | 9624 KB | Output is correct |
24 | Correct | 45 ms | 9624 KB | Output is correct |
25 | Correct | 60 ms | 9624 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 267 ms | 9624 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 267 ms | 9624 KB | Output is correct |
2 | Correct | 281 ms | 9624 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 267 ms | 9624 KB | Output is correct |
2 | Correct | 281 ms | 9624 KB | Output is correct |
3 | Correct | 279 ms | 9624 KB | Output is correct |