結果
| 問題 |
No.457 (^^*)
|
| コンテスト | |
| ユーザー |
htensai
|
| 提出日時 | 2020-05-13 12:53:17 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,240 bytes |
| コンパイル時間 | 2,401 ms |
| コンパイル使用メモリ | 84,652 KB |
| 実行使用メモリ | 56,828 KB |
| 最終ジャッジ日時 | 2024-09-14 15:34:15 |
| 合計ジャッジ時間 | 6,808 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 WA * 11 |
ソースコード
import java.util.*;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
char[] arr = sc.next().toCharArray();
int length = arr.length;
ArrayList<Integer> openIdxes = new ArrayList<>();
ArrayList<Integer> closeIdxes = new ArrayList<>();
TreeSet<Integer> asterIdxes = new TreeSet<>();
int[] eyeCount = new int[length];
for (int i = 0; i < length; i++) {
switch (arr[i]) {
case '(' :
openIdxes.add(i);
break;
case ')' :
closeIdxes.add(i);
break;
case '*' :
asterIdxes.add(i);
break;
case '^' :
eyeCount[i]++;
break;
}
}
if (openIdxes.size() == 0 || closeIdxes.size() == 0) {
System.out.println("0 0");
return;
}
asterIdxes.add(0);
asterIdxes.add(length - 1);
for (int i = 1; i < length; i++) {
eyeCount[i] += eyeCount[i - 1];
}
int left = 0;
int right = 0;
int leftCount = 0;
while (true) {
boolean endflag = false;
while (true) {
int idx = asterIdxes.ceiling(openIdxes.get(left));
if (eyeCount[closeIdxes.get(right)] - eyeCount[idx] >= 2) {
leftCount += closeIdxes.size() - right;
break;
}
right++;
if (right >= closeIdxes.size()) {
endflag = true;
break;
}
}
if (endflag) {
break;
}
left++;
if (left >= openIdxes.size()) {
break;
}
}
left = 0;
right = 0;
int rightCount = 0;
while (true) {
boolean endflag = false;
while (true) {
int idx = asterIdxes.floor(closeIdxes.get(right));
if (eyeCount[idx] - eyeCount[openIdxes.get(left)] >= 2) {
rightCount += closeIdxes.size() - right;
break;
}
right++;
if (right >= closeIdxes.size()) {
endflag = true;
break;
}
}
if (endflag) {
break;
}
left++;
if (left >= openIdxes.size()) {
break;
}
}
System.out.println(rightCount + " " + leftCount);
}
}
htensai