結果
| 問題 |
No.265 数学のテスト
|
| コンテスト | |
| ユーザー |
uafr_cs
|
| 提出日時 | 2017-11-03 20:18:14 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 766 ms / 2,000 ms |
| コード長 | 2,508 bytes |
| コンパイル時間 | 2,155 ms |
| コンパイル使用メモリ | 79,972 KB |
| 実行使用メモリ | 48,900 KB |
| 最終ジャッジ日時 | 2024-11-22 15:45:00 |
| 合計ジャッジ時間 | 11,280 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
ソースコード
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static long[] make_x(int D, int deg, int a){
long[] ret = new long[D];
ret[deg] = a;
return ret;
}
public static long[] diff(int D, long[] term){
long[] ret = new long[D];
for(int i = 1; i < D; i++){
ret[i - 1] = i * term[i];
}
return ret;
}
public static long[] add(int D, long[] term1, long[] term2){
long[] ret = new long[D];
for(int i = 0; i < D; i++){
ret[i] = term1[i] + term2[i];
}
return ret;
}
public static long[] parse(int D, char[] chs, int start, int last){
//System.out.println(start + " " + last + " : " + chs[start]);
if(chs[start] == 'd'){
// d{ ___ } を評価する
int kakko_lv = 0, kakko_start = -1, kakko_last = -1;
for(int pos = start + 1; pos <= last; pos++){
if(chs[pos] == '{'){
if(kakko_lv == 0){ kakko_start = pos; }
kakko_lv += 1;
}else if(chs[pos] == '}'){
kakko_lv -= 1;
if(kakko_lv == 0){ kakko_last = pos; break; }
}
}
//System.out.println(kakko_start + " " + kakko_last);
long[] curr_x = diff(D, parse(D, chs, kakko_start + 1, kakko_last - 1));
//System.out.println(Arrays.toString(curr_x));
if(kakko_last == last){
return curr_x;
}else{
return add(D, curr_x, parse(D, chs, kakko_last + 2, last));
}
}else if(chs[start] == 'x' || Character.isDigit(chs[start])){
int x_count = 0;
int a_count = 1;
if(chs[start] == 'x'){
x_count++;
}else{
a_count = Character.getNumericValue(chs[start]);
}
int plus_begin = -1;
for(int pos = start + 1; pos <= last; pos++){
if(chs[pos] == '+'){
plus_begin = pos; break;
}else if(chs[pos] == 'x'){
x_count++;
}else if(Character.isDigit(chs[pos])){
a_count *= Character.getNumericValue(chs[pos]);
}
}
final long[] curr_x = make_x(D, x_count, a_count);
//System.out.println("x : " + Arrays.toString(curr_x));
if(plus_begin < 0){
return curr_x;
}else{
return add(D, curr_x, parse(D, chs, plus_begin + 1, last));
}
}
return null;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
final int N = sc.nextInt();
final int D = sc.nextInt();
final char[] chs = sc.next().toCharArray();
long[] ret = parse(D + 1, chs, 0, N - 1);
for(int i = 0; i <= D; i++){
System.out.print((i == 0 ? "" : " ") + ret[i]);
}
System.out.println();
}
}
uafr_cs