解いた問題

5/27/2011

SRM341Div2

250
class ChangingString {
public:
  int distance(string A, string B, int K) {

    const int size = A.size();

    int d[ size ];
    for(int i=0; i<size; ++i){
      d[i] = abs( A[i] - B[i] );
    }
    sort( d, d + size );
    reverse( d, d + size );

    for(int i=0; i<K; ++i){
      d[i] = (d[i] == 0);
    }

    return accumulate( d, d + size, 0 );
  }
};
500
class KLastNonZeroDigits {
public:
  string getKDigits(int N, int K) {
    lli f = 1;
    lli n = N;

    lli mod = 1000000000LL;
    bool flg = false;

    for(lli i=1; i<=n; ++i){
      f *= i;
      while( f % 10 == 0 ) f /= 10;
      flg = flg || ( f / mod );
      f %= mod;
    }
    
    ostringstream oss;
    oss << f;
    
    string s = oss.str();
    while( s[ (int)s.size() - 1 ] == '0' ){
      s.erase( s.begin() + (int)s.size() - 1 );
    }
    while( K < s.size() ) s.erase( s.begin() );

    if( flg ){
      while( s.size() < K )s = "0" + s;
    }

    return s;
  }
};
1050

0 件のコメント :

コメントを投稿