cafelier のSRM参加記録です。コンテスト中に考えてたことを執拗に全部書き残すとどうなるだろうかという試み本番中にこういうコードが書きたかったなあ、という後で書いた反省コードを書き残す試み
スパムが来たのでしばらくコメント欄をはてなユーザ限定にしています、すみません、
SRM | |
class PrimeSequences { public: int getLargestGenerator(int N, int D) { int result = -1; vector<int> p(N+1, 1); p[0] = p[1] = 0; for(int q=2; q<=N; ++q) if( p[q] ) { for(int qq=q+q; qq<=N; qq+=q) p[qq] = 0; p[q] = p[q/2]+1; if( p[q] >= D ) result = q; } return result; } };
class ThirteenHard { public: int calcTime(vector <string> city) { typedef int vert; typedef int cost; typedef pair<cost,vert> cedge; priority_queue< cedge, vector<cedge>, greater<cedge> > Q; Q.push( cedge(0,1*32+0) ); set<int> visited; while( !Q.empty() ) { cedge s = Q.top(); Q.pop(); if( visited.count(s.second) ) continue; visited.insert(s.second); int v = s.second%32; int mask = s.second/32; int c = s.first; if( v == city.size()-1 ) return c; for(int i=0; i<city.size(); ++i) { char dd = city[v][i]; int d = ('a'<=dd && dd<='z' ? dd-'a'+27 : dd-'A'+1); if( dd!='#' && d%13>0 ) { int mask2 = mask << (d%13); if( mask2 & (1<<13) ) continue; mask2 = (mask2 & ((1<<13) - 1)) | (mask2 >> 13) | (1<<d%13); int s2 = mask2*32 + i; if( !visited.count(s2) ) Q.push( cedge(c+d, s2) ); } } } return -1; } };
presented by cafelier/k.inaba under