ログインしてください。
提出 #64377729
ソースコード 拡げる
import static java.lang.Integer.parseInt;
import static java.lang.Long.parseLong;
import static java.lang.System.exit;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class Main {
static final int MOD = 998244353;
static int add(int a, int b) {
int res = a + b;
return res >= MOD ? res - MOD : res;
}
static int sub(int a, int b) {
int res = a - b;
return res < 0 ? res + MOD : res;
}
static int mul(int a, int b) {
int res = (int) ((long) a * b % MOD);
return res < 0 ? res + MOD : res;
}
static int pow(int a, int e) {
if (e == 0) {
return 1;
}
int r = a;
for (int i = 30 - Integer.numberOfLeadingZeros(e); i >= 0; i--) {
r = mul(r, r);
if ((e & (1 << i)) != 0) {
r = mul(r, a);
}
}
return r;
}
static int inv(int a) {
return pow(a, MOD - 2);
}
static void solve() throws Exception {
int n = scanInt(), k = scanInt();
String s = scanString();
int facts[] = new int[n + 2];
facts[0] = 1;
for (int i = 1; i < facts.length; i++) {
facts[i] = mul(facts[i - 1], i);
}
int factsInv[] = new int[facts.length];
factsInv[facts.length - 1] = inv(facts[facts.length - 1]);
for (int i = facts.length - 1; i > 0; i--) {
factsInv[i - 1] = mul(factsInv[i], i);
}
int shortRuns = 0, longRuns = 0, sum = 0;
for (int i = 0; i < k; i++) {
if (s.charAt(i) == '(') {
if (longRuns == 0) {
if (sum == 0) {
++shortRuns;
} else {
--shortRuns;
++longRuns;
}
} else {
if (sum == 0) {
++longRuns;
}
}
++sum;
} else {
--sum;
}
}
int ans = 0;
if (longRuns == 0) {
for (int i = shortRuns; 2 * i <= n; i++) {
ans = add(ans, mul(facts[n + 1], mul(factsInv[2 * i + 1], factsInv[n - 2 * i])));
}
} else {
ans = mul(facts[n - k + 2 * shortRuns + longRuns + 1],
mul(factsInv[2 * shortRuns + longRuns + 1], factsInv[n - k]));
if (n > k) {
ans = add(ans, mul(mul(facts[n - k + 2 * shortRuns + longRuns + 1],
mul(factsInv[2 * shortRuns + longRuns + 2], factsInv[n - k - 1])), longRuns));
}
}
out.println(ans);
}
static int scanInt() throws IOException {
return parseInt(scanString());
}
static long scanLong() throws IOException {
return parseLong(scanString());
}
static String scanString() throws IOException {
while (tok == null || !tok.hasMoreTokens()) {
tok = new StringTokenizer(in.readLine());
}
return tok.nextToken();
}
static BufferedReader in;
static PrintWriter out;
static StringTokenizer tok;
public static void main(String[] args) {
try {
in = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(System.out);
solve();
in.close();
out.close();
} catch (Throwable e) {
e.printStackTrace();
exit(1);
}
}
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | B - Maximum Bracket Subsequence |
| ユーザ | eatmore |
| 言語 | Java (OpenJDK 17) |
| 得点 | 900 |
| コード長 | 3016 Byte |
| 結果 | AC |
| 実行時間 | 260 ms |
| メモリ | 118580 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 900 / 900 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt |
| All | 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_random_case_01.txt, 01_random_case_02.txt, 01_random_case_03.txt, 01_random_case_04.txt, 01_random_case_05.txt, 01_random_case_06.txt, 01_random_case_07.txt, 01_random_case_08.txt, 01_random_case_09.txt, 01_random_case_10.txt, 01_random_case_11.txt, 01_random_case_12.txt, 01_random_case_13.txt, 01_random_case_14.txt, 01_random_case_15.txt, 01_random_case_16.txt, 02_simple_case_01.txt, 02_simple_case_02.txt, 02_simple_case_03.txt, 02_simple_case_04.txt, 02_simple_case_05.txt, 02_simple_case_06.txt, 02_simple_case_07.txt, 02_simple_case_08.txt, 02_simple_case_09.txt, 02_simple_case_10.txt, 02_simple_case_11.txt, 02_simple_case_12.txt, 03_max_case_01.txt, 03_max_case_02.txt, 03_max_case_03.txt, 03_max_case_04.txt, 03_max_case_05.txt, 03_max_case_06.txt, 03_max_case_07.txt, 03_max_case_08.txt, 03_max_case_09.txt, 03_max_case_10.txt, 03_max_case_11.txt, 03_max_case_12.txt, 03_max_case_13.txt, 03_max_case_14.txt, 03_max_case_15.txt, 03_max_case_16.txt, 03_max_case_17.txt, 03_max_case_18.txt, 03_max_case_19.txt, 03_max_case_20.txt, 04_corner_01.txt, 04_corner_02.txt, 04_corner_03.txt, 04_corner_04.txt, 04_corner_05.txt, 04_corner_06.txt, 05_handmade_01.txt, 05_handmade_02.txt, 05_handmade_03.txt, 05_handmade_04.txt, 05_handmade_05.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_01.txt | AC | 39 ms | 34204 KiB |
| 00_sample_02.txt | AC | 36 ms | 34684 KiB |
| 00_sample_03.txt | AC | 36 ms | 34428 KiB |
| 00_sample_04.txt | AC | 179 ms | 114712 KiB |
| 01_random_case_01.txt | AC | 137 ms | 58820 KiB |
| 01_random_case_02.txt | AC | 157 ms | 66096 KiB |
| 01_random_case_03.txt | AC | 150 ms | 65500 KiB |
| 01_random_case_04.txt | AC | 172 ms | 69240 KiB |
| 01_random_case_05.txt | AC | 173 ms | 75472 KiB |
| 01_random_case_06.txt | AC | 154 ms | 65012 KiB |
| 01_random_case_07.txt | AC | 125 ms | 47972 KiB |
| 01_random_case_08.txt | AC | 241 ms | 113356 KiB |
| 01_random_case_09.txt | AC | 139 ms | 51928 KiB |
| 01_random_case_10.txt | AC | 143 ms | 56220 KiB |
| 01_random_case_11.txt | AC | 162 ms | 70612 KiB |
| 01_random_case_12.txt | AC | 150 ms | 58116 KiB |
| 01_random_case_13.txt | AC | 192 ms | 91564 KiB |
| 01_random_case_14.txt | AC | 169 ms | 74076 KiB |
| 01_random_case_15.txt | AC | 136 ms | 52816 KiB |
| 01_random_case_16.txt | AC | 216 ms | 103768 KiB |
| 02_simple_case_01.txt | AC | 151 ms | 61456 KiB |
| 02_simple_case_02.txt | AC | 148 ms | 58824 KiB |
| 02_simple_case_03.txt | AC | 163 ms | 72308 KiB |
| 02_simple_case_04.txt | AC | 160 ms | 64276 KiB |
| 02_simple_case_05.txt | AC | 192 ms | 83228 KiB |
| 02_simple_case_06.txt | AC | 138 ms | 55940 KiB |
| 02_simple_case_07.txt | AC | 193 ms | 91292 KiB |
| 02_simple_case_08.txt | AC | 233 ms | 111264 KiB |
| 02_simple_case_09.txt | AC | 185 ms | 84516 KiB |
| 02_simple_case_10.txt | AC | 208 ms | 99988 KiB |
| 02_simple_case_11.txt | AC | 193 ms | 92220 KiB |
| 02_simple_case_12.txt | AC | 174 ms | 75064 KiB |
| 03_max_case_01.txt | AC | 240 ms | 117912 KiB |
| 03_max_case_02.txt | AC | 241 ms | 118008 KiB |
| 03_max_case_03.txt | AC | 241 ms | 118376 KiB |
| 03_max_case_04.txt | AC | 242 ms | 118208 KiB |
| 03_max_case_05.txt | AC | 243 ms | 117796 KiB |
| 03_max_case_06.txt | AC | 239 ms | 118020 KiB |
| 03_max_case_07.txt | AC | 245 ms | 117896 KiB |
| 03_max_case_08.txt | AC | 242 ms | 117828 KiB |
| 03_max_case_09.txt | AC | 242 ms | 118580 KiB |
| 03_max_case_10.txt | AC | 246 ms | 118176 KiB |
| 03_max_case_11.txt | AC | 238 ms | 118168 KiB |
| 03_max_case_12.txt | AC | 238 ms | 117772 KiB |
| 03_max_case_13.txt | AC | 236 ms | 118180 KiB |
| 03_max_case_14.txt | AC | 233 ms | 118192 KiB |
| 03_max_case_15.txt | AC | 241 ms | 118008 KiB |
| 03_max_case_16.txt | AC | 238 ms | 117748 KiB |
| 03_max_case_17.txt | AC | 238 ms | 118272 KiB |
| 03_max_case_18.txt | AC | 235 ms | 117836 KiB |
| 03_max_case_19.txt | AC | 236 ms | 117840 KiB |
| 03_max_case_20.txt | AC | 234 ms | 118044 KiB |
| 04_corner_01.txt | AC | 242 ms | 107692 KiB |
| 04_corner_02.txt | AC | 205 ms | 105868 KiB |
| 04_corner_03.txt | AC | 161 ms | 63764 KiB |
| 04_corner_04.txt | AC | 250 ms | 116016 KiB |
| 04_corner_05.txt | AC | 150 ms | 59224 KiB |
| 04_corner_06.txt | AC | 126 ms | 46296 KiB |
| 05_handmade_01.txt | AC | 37 ms | 34432 KiB |
| 05_handmade_02.txt | AC | 38 ms | 34548 KiB |
| 05_handmade_03.txt | AC | 180 ms | 114816 KiB |
| 05_handmade_04.txt | AC | 260 ms | 118172 KiB |
| 05_handmade_05.txt | AC | 240 ms | 117764 KiB |