夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

寝過ごした〜orz

non rated

ParingPaws

やるだけ

class PairingPawns {
public:
   int savedPawnCount( vector <int> start ) {
    for (int i=start.size()-1; i>0; i--) {
        while (start[i]>=2) {
            start[i]-=2;
            start[i-1]++;
        }
    }
    return start[0];
   }
};

KingSort

ローマ数字+めんどいイテレーター←一例

class KingSort {
public:
    int conv(string num) {
        int res=0;
        for (int i=0; i<num.length(); i++) {
            if (num[i]=='I') res++;
            else if (i&&num[i-1]=='I'&&num[i]=='V') res+=3;
            else if (num[i]=='V') res+=5;
            else if (i&&num[i-1]=='I'&&num[i]=='X') res+=8;
            else if (num[i]=='X') res+=10;
            else if (i&&num[i-1]=='X'&&num[i]=='L') res+=30;
            else if (num[i]=='L') res+=50;
        }
        return res;
    }
   vector <string> getSortedList( vector <string> kings ) {
       // I, II, III, IV, V, VI, VII, VIII, IX, X
       // XX, XXX, XL, L
       sort(kings.begin(), kings.end());
       mp ks;
       for (int i=0; i<kings.size(); i++) {
           string name="", num=""; int j;
           for (j=0; j<kings[i].length(); j++) {
               if (kings[i][j]==' ') break;
               name += kings[i][j];
           }
           for (j+=1; j<kings[i].length(); j++) {
               num += kings[i][j];
           }
           ks[name].push_back(make_pair(conv(num), num));
       }
       vector<string> res;
       for (mp::iterator it=ks.begin(); it!=ks.end(); it++) {
           sort((*it).second.begin(), (*it).second.end());
           for (int i=0; i<(*it).second.size(); i++) {
               string r="";
               r+=(*it).first;
               r+=" ";
               r+=(*it).second[i].second;
               res.push_back(r);
           }
       }
       return res;
   }
};

AOJ0039の実装量とくらべれば・・・

MinskyMysteryDiv2

要するに10^12以下の正整数Nを一番最初に割り切れる数字をxとしたとき、N/x+xを返せという事。
なんか長ったらしい擬似コードあるけどようするにそういうことです。
で、まぁ素数は別として高々10^6までの素数で割ってけば充分だからそうしました。-1は1以下のときに(割るのが2から始まるので。)

class MinskyMysteryDiv2 {
public:
   long long computeAnswer( long long N ) {
       if (N<2) return -1;
       ll isprime[1000001];
       vector<ll> prime;
       fill(isprime, isprime+1000001, 1);
       isprime[0]=isprime[1]=0;
       for (int i=2; i<1000001; i++) {
           if (isprime[i]) {
               prime.push_back(i);
               for (int j=i*2; j<1000001; j+=i) isprime[j]=0;
           }
       }
       for (int i=0; i<prime.size(); i++) {
           if (N%prime[i]==0) {
               return N/prime[i]+prime[i];
           }
       }
       return N+1;
   }
};

最後は気づくの遅かったんでわかりませんが、全完ありえましたね・・・

なのに寝過ごす・・・なんでこういう時に限って・・・・
プラクティス公開直後プラクティスルーム単独一位w