結果

問題 No.695 square1001 and Permutation 4
ユーザー eQeeQe
提出日時 2024-10-10 02:32:39
言語 C++23
(gcc 12.3.0 + boost 1.83.0)
結果
MLE  
実行時間 -
コード長 3,878 bytes
コンパイル時間 5,755 ms
コンパイル使用メモリ 313,776 KB
実行使用メモリ 159,532 KB
最終ジャッジ日時 2024-10-10 02:32:47
合計ジャッジ時間 7,619 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,820 KB
testcase_01 AC 11 ms
11,096 KB
testcase_02 AC 25 ms
42,172 KB
testcase_03 AC 23 ms
42,108 KB
testcase_04 AC 47 ms
42,308 KB
testcase_05 AC 45 ms
42,240 KB
testcase_06 MLE -
testcase_07 MLE -
testcase_08 MLE -
testcase_09 MLE -
testcase_10 AC 20 ms
18,944 KB
testcase_11 MLE -
testcase_12 MLE -
testcase_13 MLE -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
#include<atcoder/all>
namespace my{
void main();
void solve();
}
int main(){my::main();}
namespace my{
#define eb emplace_back
#define LL(...) ll __VA_ARGS__;lin(__VA_ARGS__)
#define VL(n,...) vec<ll>__VA_ARGS__;setsize({n},__VA_ARGS__);lin(__VA_ARGS__)
#define FO(n) for(ll ij=0;ij<n;++ij)
#define FOR(i,...) for(auto[i,i##stop,i##step]=range(0,__VA_ARGS__);i<i##stop;i+=i##step)
#define fo(i,...) FO##__VA_OPT__(R)(i __VA_OPT__(,__VA_ARGS__))
#define fe(a,i,...) for(auto&&__VA_OPT__([)i __VA_OPT__(,__VA_ARGS__]):a)
using namespace std;
using ll=int64_t;
using ull=uint64_t;
auto range(bool s,ll a,ll b=1e18,ll c=1){if(b==1e18)b=a,(s?b:a)=0;return array{a-s,b,c};}
constexpr char nl=10;
constexpr char sp=32;

template<class V>concept vectorial=is_base_of_v<vector<typename V::value_type>,V>;
template<class T>struct core_type{using type=T;};
template<vectorial V>struct core_type<V>{using type=typename core_type<typename V::value_type>::type;};
template<class V>istream&operator>>(istream&i,vector<V>&v){fe(v,e)i>>e;return i;}
template<class V>ostream&operator<<(ostream&o,const vector<V>&v){fe(v,e)o<<e<<string(&e!=&v.back(),vectorial<V>?nl:sp);return o;}

template<class V>struct vec:vector<V>{
  using vector<V>::vector;
  vec(const vector<V>&v){this->reserve(v.size());fe(v,e)this->eb(e);}

  vec&operator+=(const vec&u){vec&v=*this;fo(i,v.size())v[i]+=u[i];return v;}
  vec&operator-=(const vec&u){vec&v=*this;fo(i,v.size())v[i]-=u[i];return v;}
  vec&operator^=(const vec&u){this->insert(this->end(),u.begin(),u.end());return*this;}
  vec operator+(const vec&u)const{return vec{*this}+=u;}
  vec operator-(const vec&u)const{return vec{*this}-=u;}
  vec operator^(const vec&u)const{return vec{*this}^=u;}
  vec&operator++(){fe(*this,e)++e;return*this;}
  vec&operator--(){fe(*this,e)--e;return*this;}
  vec operator-()const{vec v=*this;fe(v,e)e=-e;return v;}
};
template<class T=ll,size_t n,size_t i=0>auto make_vec(const ll(&s)[n],T x={}){if constexpr(n==i+1)return vec<T>(s[i],x);else{auto X=make_vec<T,n,i+1>(s,x);return vec<decltype(X)>(s[i],X);}}
template<ll n,class...A>void setsize(const ll(&l)[n],A&...a){((a= make_vec(l,typename core_type<A>::type())),...);}

void io(){cin.tie(nullptr)->sync_with_stdio(0);cout<<fixed<<setprecision(15);}
void lin(auto&...a){(cin>>...>>a);}
template<char c=sp>void pp(const auto&...a){ll n=sizeof...(a);((cout<<a<<string(--n>0,c)),...);cout<<nl;}

struct modll{
  static inline ll N=998244353;
  ll a;

  static void set_mod(ll N){modll::N=N;}
  static ll mod(){return N;}

  modll()=default;
  modll(ll a):a((a%=N)<0?a+N:a){}
  auto&operator+=(const modll&b){if(ull(a+=b.a)>=N)a-=N;return*this;}
  auto&operator-=(const modll&b){if(ull(a+=N-b.a)>=N)a-=N;return*this;}
  auto&operator*=(const modll&b){(a*=b.a)%=N;return*this;}
  auto&operator/=(const modll&b){return*this*=b.inv();}

  friend auto operator+(const modll&a,const modll&b){return modll{a}+=b;}
  friend auto operator-(const modll&a,const modll&b){return modll{a}-=b;}
  friend auto operator*(const modll&a,const modll&b){return modll{a}*=b;}
  friend auto operator/(const modll&a,const modll&b){return modll{a}/=b;}
  friend bool operator==(const modll&a,const modll&b){return a.a==b.a;}
  auto operator-()const{return N-a;}

  modll inv()const{
    assert(gcd(a,N)==1);
    ll a=this->a,b=N,u=1,v=0;
    while(b)swap(u-=a/b*v,v),swap(a-=a/b*b,b);
    return u;
  }

  ll val()const{return a;}

  friend istream&operator>>(istream&i,modll&b){ull t;i>>t;b=t;return i;}
  friend ostream&operator<<(ostream&o,const modll&b){return o<<b.val();}
};

template<class T>T mod(T a,T m){return(a%=m)<0?a+m:a;}

void main(){io();ll T=1;fo(T)solve();}
void solve(){
  LL(N,K);
  VL(K,a);
  ll mod=100000000000000007LL;
  modll::set_mod(mod);

  vec<modll>dp(N);
  dp[0]=1;
  fo(i,N){
    fo(j,K)if(i+a[j]<N)dp[i+a[j]]+=dp[i];
  }
  pp(dp[N-1]);
}}
0