解いた問題

4/15/2011

SRM307Div2

250
class BootsExchange {
public:
  int leastAmount(vector <int> l, vector <int> r) {
    for(int i=0; i<l.size(); ++i){
      for(int j=0; j<r.size(); ++j){
        if(l[i] == r[j]){
          l.erase( l.begin() + i );
          r.erase( r.begin() + j );
          --i;
          break;
        }
      }
    }
    return r.size();
  }
};
500
 class PartSorting {
public:
  vector <int> process(vector <int> d, int s) {
    for(int i=0; i<d.size() && s; ++i){
      int mx = -1, idx = -1;
      for(int j=i+1; j<d.size() && j<s+i+1; ++j){
        if(mx < d[j]){
          mx = d[j];
          idx = j;
        }
      }
      if(d[i] > d[idx])continue;
      if(mx == -1)break;
      d.erase( d.begin() + idx );
      d.insert( d.begin() + i, mx );
      s -= (idx - i);
    }
    return d;
  }
}; 
1000
約数を求めるコードを既に持ってた。
const int N = 5200000 + 1;

int c[N];

void solve(void)
{
  for(int i=1; i<N; ++i)c[i] = 1;
  for(int j=2; j<N; ++j){
    for(int i=j; i<N; i+=j)c[i]++;
  }
  return ;
}

class PreprimeNumbers {
public:
  int nthNumber(int n) {
    int r = 0;
    solve();
    for(int i=0; i<N; ++i){
      if(c[i] == 4)--n;
      if(n == 0){
        r = i;
        break;
      }
    }
    return r;
  }
};

0 件のコメント :

コメントを投稿