結果

問題 No.265 数学のテスト
ユーザー HaarHaar
提出日時 2019-07-03 05:56:25
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 10 ms / 2,000 ms
コード長 3,661 bytes
コンパイル時間 2,264 ms
コンパイル使用メモリ 203,632 KB
実行使用メモリ 12,672 KB
最終ジャッジ日時 2024-09-14 06:25:56
合計ジャッジ時間 3,545 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 10 ms
12,672 KB
testcase_01 AC 6 ms
8,192 KB
testcase_02 AC 6 ms
6,940 KB
testcase_03 AC 4 ms
6,944 KB
testcase_04 AC 4 ms
6,940 KB
testcase_05 AC 5 ms
6,944 KB
testcase_06 AC 4 ms
6,944 KB
testcase_07 AC 5 ms
6,940 KB
testcase_08 AC 5 ms
6,940 KB
testcase_09 AC 4 ms
6,940 KB
testcase_10 AC 4 ms
6,940 KB
testcase_11 AC 4 ms
6,940 KB
testcase_12 AC 2 ms
6,944 KB
testcase_13 AC 2 ms
6,940 KB
testcase_14 AC 2 ms
6,940 KB
testcase_15 AC 2 ms
6,940 KB
testcase_16 AC 2 ms
6,944 KB
testcase_17 AC 2 ms
6,940 KB
testcase_18 AC 2 ms
6,944 KB
testcase_19 AC 2 ms
6,944 KB
testcase_20 AC 2 ms
6,940 KB
testcase_21 AC 2 ms
6,944 KB
testcase_22 AC 3 ms
6,944 KB
testcase_23 AC 2 ms
6,940 KB
testcase_24 AC 2 ms
6,944 KB
testcase_25 AC 3 ms
6,944 KB
testcase_26 AC 2 ms
6,940 KB
testcase_27 AC 2 ms
6,944 KB
testcase_28 AC 2 ms
6,944 KB
testcase_29 AC 2 ms
6,940 KB
testcase_30 AC 2 ms
6,944 KB
testcase_31 AC 2 ms
6,940 KB
testcase_32 AC 2 ms
6,940 KB
testcase_33 AC 2 ms
6,944 KB
testcase_34 AC 2 ms
6,944 KB
testcase_35 AC 2 ms
6,940 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#define LLI long long int
#define FOR(v, a, b) for(LLI v = (a); v < (b); ++v)
#define FORE(v, a, b) for(LLI v = (a); v <= (b); ++v)
#define REP(v, n) FOR(v, 0, n)
#define REPE(v, n) FORE(v, 0, n)
#define REV(v, a, b) for(LLI v = (a); v >= (b); --v)
#define ALL(x) (x).begin(), (x).end()
#define RALL(x) (x).rbegin(), (x).rend()
#define ITR(it, c) for(auto it = (c).begin(); it != (c).end(); ++it)
#define RITR(it, c) for(auto it = (c).rbegin(); it != (c).rend(); ++it)
#define EXIST(c,x) ((c).find(x) != (c).end())
#define fst first
#define snd second
#define popcount __builtin_popcount
#define UNIQ(v) (v).erase(unique(ALL(v)), (v).end())
#define bit(i) (1LL<<(i))
#define sz(v) ((LLI)(v).size())

#ifdef DEBUG
#include <misc/C++/Debug.cpp>
#else
#define dump(...) ((void)0)
#endif

#define gcd __gcd

using namespace std;
template <class T> constexpr T lcm(T m, T n){return m/gcd(m,n)*n;}

template <typename I> void join(ostream &ost, I s, I t, string d=" "){for(auto i=s; i!=t; ++i){if(i!=s)ost<<d; ost<<*i;}ost<<endl;}
template <typename T> istream& operator>>(istream &is, vector<T> &v){for(auto &a : v) is >> a; return is;}
template <typename T, typename U> istream& operator>>(istream &is, pair<T,U> &p){is >> p.first >> p.second; return is;}

template <typename T, typename U> bool chmin(T &a, const U &b){return (a>b ? a=b, true : false);}
template <typename T, typename U> bool chmax(T &a, const U &b){return (a<b ? a=b, true : false);}
template <typename T, size_t N, typename U> void fill_array(T (&a)[N], const U &v){fill((U*)a, (U*)(a+N), v);}

struct polynomial{
  int64_t d[11] = {};
};

polynomial operator+(const polynomial &a, const polynomial &b){
  polynomial ret;
  REPE(i,10) ret.d[i] = a.d[i] + b.d[i];
  return ret;
}

polynomial operator*(const polynomial &a, const polynomial &b){
  polynomial ret;
  REPE(i,10){
    REPE(j,10){
      if(i+j > 10) continue;
      ret.d[i+j] += a.d[i] * b.d[j];
    }
  }
  return ret;
}

polynomial differentiate(const polynomial &a){
  polynomial ret;

  REP(i,10){
    ret.d[i] = a.d[i+1] * (i+1);
  }

  return ret;
}

void show(const polynomial &a){
  REPE(i,10){
    cerr << a.d[i] << " ";
  }
  cerr << endl;
}




using state = string::const_iterator;

struct parser{

  static polynomial number(state &cur){
    polynomial ret;
    int64_t n = *cur-'0';

    while(1){
      ++cur;
      if(isdigit(*cur)){
	n = n*10 + *cur-'0';
      }else{
	break;
      }
    }

    ret.d[0] = n;
    return ret;
  }

  static polynomial factor(state &cur){
    polynomial ret;

    if(isdigit(*cur)){
      ret = number(cur);
    }else if(*cur == 'x'){
      ret.d[1] = 1;
      ++cur;
    }else if(*cur == 'd'){
      ++cur; // d
      ++cur; // open bracket

      polynomial temp  = expression(cur);
      ret = differentiate(temp);
      ++cur; // close bracket
    }

    return ret;
  }

  static polynomial term(state &cur){
    polynomial ret = factor(cur);

    while(1){
      if(*cur == '*'){
	++cur;
	ret = ret * factor(cur);
      }else{
	break;
      }
    }

    return ret;
  }


  static polynomial expression(state &cur){
    polynomial ret = term(cur);

    while(1){
      if(*cur == '+'){
	++cur;
	ret = ret + term(cur);
      }else{
	break;
      }
    }
    
    return ret;
  }
  
  static polynomial parse(const string &s){
    auto cur = s.cbegin();
    return expression(cur);
  }
};



int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);

  int N,d;
  string S;
  while(cin >> N >> d >> S){
    polynomial ans = parser::parse(S);

    REPE(i,d){
      if(i) cout << " ";
      cout << ans.d[i];
    }
    
    cout << endl;
  }
  
  return 0;
}
0