結果
| 問題 |
No.193 筒の数式
|
| コンテスト | |
| ユーザー |
ぴろず
|
| 提出日時 | 2015-04-26 22:12:35 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 129 ms / 1,000 ms |
| コード長 | 1,610 bytes |
| コンパイル時間 | 2,919 ms |
| コンパイル使用メモリ | 77,788 KB |
| 実行使用メモリ | 54,428 KB |
| 最終ジャッジ日時 | 2024-07-05 02:55:42 |
| 合計ジャッジ時間 | 5,226 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 |
ソースコード
package no193;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] s = sc.next().toCharArray();
int n = s.length;
long ans = - (1<<60);
for(int i=0;i<n;i++) {
char[] t = new char[n];
for(int j=0;j<n;j++) {
t[j] = s[(i+j)%n];
}
if (Character.isDigit(t[0]) && Character.isDigit(t[n-1])) {
ans = Math.max(ans, new Expression(String.valueOf(t)).exp());
}
}
System.out.println(ans);
}
}
class Expression {
private String expression;
private int begin = 0;
public Expression(String expression) {
this.expression = expression;
}
public long exp() {
long num = term();
while(begin<expression.length()) {
char c = expression.charAt(begin);
if (c=='+') {
begin++;
num+=term();
}else if(c=='-') {
begin++;
num-=term();
}else{
break;
}
}
return num;
}
private long term() {
long num = factor();
while(begin<expression.length()) {
char c = expression.charAt(begin);
if (c=='*') {
begin++;
num*=factor();
}else if(c=='/') {
begin++;
num/=factor();
}else{
break;
}
}
return num;
}
private long factor() {
char c = expression.charAt(begin);
if (c=='(') {
begin++; //(
long num = exp();
begin++; //)
return num;
}else{
return number();
}
}
private long number() {
long num = 0;
while(begin<expression.length()) {
if (Character.isDigit(expression.charAt(begin))) {
num*=10;
num+=expression.charAt(begin)-'0';
begin++;
}else{
break;
}
}
return num;
}
}
ぴろず