結果
| 問題 |
No.265 数学のテスト
|
| コンテスト | |
| ユーザー |
tnakao0123
|
| 提出日時 | 2016-03-31 13:51:10 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,077 bytes |
| コンパイル時間 | 945 ms |
| コンパイル使用メモリ | 87,824 KB |
| 実行使用メモリ | 7,680 KB |
| 最終ジャッジ日時 | 2024-10-02 08:25:29 |
| 合計ジャッジ時間 | 2,372 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 27 WA * 1 RE * 4 |
ソースコード
/* -*- coding: utf-8 -*-
*
* 265.cc: No.265 数学のテスト - yukicoder
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<deque>
#include<algorithm>
#include<numeric>
#include<utility>
#include<complex>
#include<functional>
using namespace std;
/* constant */
/* typedef */
typedef vector<int> vi;
struct Func {
int d;
vi as;
Func() {}
Func(int _d): d(_d), as(_d + 1, 0) {}
Func(int _d, int _k): d(_d), as(_d + 1, 0) { as[0] = _k; }
void plus(const Func &f) {
for (int i = 0; i <= d; i++) as[i] += f.as[i];
}
void mul(int k) {
for (int i = 0; i <= d; i++) as[i] *= k;
}
void mul_x() {
for (int i = d; i >= 0; i--) as[i + 1] = as[i];
as[0] = 0;
}
void diff() {
for (int i = 1; i <= d; i++) as[i - 1] = i * as[i];
as[d] = 0;
}
void print() {
for (int i = 0; i <= d; i++) {
if (i > 0) putchar(' ');
printf("%d", as[i]);
}
putchar('\n');
}
};
/* global variables */
/* subroutines */
Func expr(string &s, int &pos, int d);
int num(string &s, int &pos) {
int r = 0;
while (pos < s.size() && s[pos] >= '0' && s[pos] <= '9')
r = r * 10 + s[pos++] - '0';
return r;
}
Func term(string &s, int &pos, int d) {
if (s[pos] == 'd') {
pos += 2; // 'd{'
Func t0 = expr(s, pos, d);
pos++; // '}'
t0.diff();
return t0;
}
Func t0(d, 1);
if (s[pos] == 'x') t0.mul_x(), pos++;
else t0.mul(num(s, pos));
while (pos < s.size() && s[pos] == '*') {
pos++; // '*'
if (s[pos] == 'x') t0.mul_x(), pos++;
else t0.mul(num(s, pos));
}
return t0;
}
Func expr(string &s, int &pos, int d) {
Func e0 = term(s, pos, d);
while (pos < s.size() && s[pos] == '+') {
pos++; // '+'
Func e1 = term(s, pos, d);
e0.plus(e1);
}
return e0;
}
/* main */
int main() {
int n, d;
string s;
cin >> n >> d >> s;
int pos = 0;
Func e = expr(s, pos, d);
e.print();
return 0;
}
tnakao0123