結果
| 問題 |
No.457 (^^*)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-12-08 17:49:16 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 200 ms / 2,000 ms |
| コード長 | 1,286 bytes |
| コンパイル時間 | 3,691 ms |
| コンパイル使用メモリ | 79,848 KB |
| 実行使用メモリ | 55,268 KB |
| 最終ジャッジ日時 | 2024-11-28 15:20:08 |
| 合計ジャッジ時間 | 7,977 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 20 |
ソースコード
package yukicoder;
import java.util.*;
public class Q457 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int n = s.length();
int[] ans=new int[2];
for (int x = 0; x < 2; ++x) {
int[] c = new int[n];
for (int i = n - 1; i >= 0; --i) {
if (i != n - 1)
c[i] = c[i + 1];
if (s.charAt(i) == ')')
++c[i];
}
int[] dp1 = new int[n];
int[] dp2 = new int[n];
int pre = n;
int cur = n;
for (int i = n - 1; i >= 0; --i) {
if (s.charAt(i) == '^') {
pre = cur;
cur = i;
}
dp1[i] = pre;
}
pre = n;
for (int i = n - 1; i >= 0; --i) {
if (s.charAt(i) == '*')
pre = i;
dp2[i] = pre;
}
for (int i = 0; i < n; ++i) {
if (s.charAt(i) == '(') {
int p = dp2[i];
if (p == n)
continue;
p = dp1[p];
if (p == n)
continue;
ans[x] += c[p];
}
}
s = reverse(s);
}
System.out.println(ans[1]+" "+ans[0]);
}
static String reverse(String s) {
StringBuilder sb = new StringBuilder();
for (int i = s.length() - 1; i >= 0; --i) {
if (s.charAt(i) == '(')
sb.append(')');
else if (s.charAt(i) == ')')
sb.append('(');
else
sb.append(s.charAt(i));
}
return sb.toString();
}
}