結果

問題 No.695 square1001 and Permutation 4
ユーザー ojisan_ITojisan_IT
提出日時 2018-06-09 00:18:46
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,493 bytes
コンパイル時間 2,119 ms
コンパイル使用メモリ 176,604 KB
実行使用メモリ 532,872 KB
最終ジャッジ日時 2024-07-22 19:24:17
合計ジャッジ時間 37,521 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
10,880 KB
testcase_01 AC 741 ms
5,376 KB
testcase_02 AC 44 ms
5,376 KB
testcase_03 WA -
testcase_04 AC 1,566 ms
5,376 KB
testcase_05 AC 3,541 ms
36,176 KB
testcase_06 AC 2,074 ms
5,376 KB
testcase_07 AC 4,872 ms
5,376 KB
testcase_08 MLE -
testcase_09 MLE -
testcase_10 AC 502 ms
5,376 KB
testcase_11 MLE -
testcase_12 -- -
testcase_13 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
template<class T> using vt = vector<T>;
template<class T> using vvt = vector<vt<T>>;
template<class T> using ttt = tuple<T,T>;
using tii = tuple<int,ll>;
using vi = vector<int>;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define pb push_back
#define mt make_tuple
#define ALL(a) (a).begin(),(a).end()
#define FST first
#define SEC second
#define DEB cerr<<"!"<<endl
#define SHOW(a,b) cerr<<(a)<<" "<<(b)<<endl
#define DIV int(1e9+7)
const int INF = (INT_MAX/2);
const ll LLINF = (LLONG_MAX/2);
const double eps = 1e-8;
//const double PI = M_PI;  
inline ll pow(ll x,ll n,ll m){ll r=1;while(n>0){if((n&1)==1)r=r*x%m;x=x*x%m;n>>=1;}return r%m;}
inline ll lcm(ll d1, ll d2){return d1 / __gcd(d1, d2) * d2;}

/*Coding Space*/
const ll Div = 100000000000000007LL;
int main(){
  int n,m; cin >> n >> m;
  vi in(m); rep(i,m)  cin >> in[i];
  priority_queue<tii, vt<tii>, greater<tii>> q; // pos, ans
  q.push(tii{0,1});
  ll tans = 0;
  while(!q.empty()){
    tans = 0;
    int now; ll ttans; tie(now, ttans) = q.top(); q.pop();
    while(!q.empty() && get<0>(q.top()) == now){
      int a; ll b; tie(a,b) = q.top(); q.pop();
      tans += b;
      tans %= Div;
    }
    tans += ttans;
    tans %= Div;
    if(now >= n){cout << 0 << endl; return 0;}
    if(now == n-1){cout << tans << endl; return 0;}
    //cerr << now << " " << tans << endl;
    for(auto dx: in)
      if(now + dx < n)
        q.push(tii{now + dx, tans});
  }
}
0