Advertisement
Guest User

Untitled

a guest
Nov 28th, 2015
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef unsigned long long ull;
  7. typedef long double ld;
  8.  
  9. #define forn(i,a,b) for( int i = (a); i < (b); i++ )
  10. #define rep(i,n) forn(i,0,n)
  11. #define repe(i,n) for( i = 0; i < (n); i++ )
  12. #define fi first
  13. #define se second
  14. #define mp make_pair
  15. #define pb push_back
  16. #define pii pair<int,int>
  17. #define pll pair<ll,ll>
  18. #define pdd pair<double,double>
  19.  
  20. const int MXP = 19;
  21. const int MXN = 100100;
  22.  
  23. vector< pair<ll,int> > val [MXP];
  24.  
  25. int ans [MXN];
  26. int anc;
  27.  
  28. int main()
  29. {
  30.  
  31.     //freopen("input.txt", "r", stdin);    freopen("output.txt", "w", stdout);
  32.     freopen("exact.in", "r", stdin);    freopen("exact.out", "w", stdout);
  33.  
  34.     ll x;
  35.     int n;
  36.     scanf("%lld%d", &x, &n);
  37.     rep(i,n){
  38.         int k,q;
  39.         scanf("%d%d", &k, &q);
  40.         ll cur = pow(10,k) * q;
  41.         val[k].pb( {cur,i} );
  42.     }
  43.     rep(i,MXP) sort(val[i].begin(), val[i].end());
  44.  
  45.     ll rest = 0;
  46.     ull cpow = 1;
  47.     vector< pair<ll,int> > tmp;
  48.     vector< pair<ll,int> > poss;
  49.     int curp = -1;
  50.     while(x){
  51.         curp++;
  52.         cpow*=10;
  53.         tmp.clear();
  54.         tmp.resize( poss.size() + val[curp].size() );
  55.         merge(poss.begin(), poss.end(), val[curp].begin(), val[curp].end(), tmp.begin());
  56.         tmp.swap(poss);
  57.         ll cur = x%cpow;
  58.         x -= cur;
  59.         if(rest>=cur){
  60.             rest -= cur;
  61.             continue;
  62.         }
  63.         cur -= (rest/(cpow/10)) * (cpow/10);
  64.         while(!poss.empty()){
  65.             pair<ll,int> q = poss.back();
  66.             ans[anc++] = q.se;
  67.             poss.pop_back();
  68.             if(cur <= q.fi){
  69.                 rest += q.fi - cur;
  70.                 cur = 0;
  71.                 break;
  72.             }
  73.             else{
  74.                 cur -= q.fi;
  75.             }
  76.         }
  77.         if(cur<=rest){
  78.             rest -= cur;
  79.         }
  80.         else{
  81.             printf("-1");
  82.             return 0;
  83.         }
  84.     }
  85.     printf("%d\n", anc);
  86.     rep(i,anc) printf("%d ", ans[i]+1);
  87.  
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement