結果
問題 | No.695 square1001 and Permutation 4 |
ユーザー |
|
提出日時 | 2024-10-10 02:32:39 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.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 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 5 MLE * 7 |
ソースコード
#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]);}}