TopCoder SRM 498 DIV2
Rating: 883→894(灰)
400.41 Points
とりあえず上がったので良かった。
全体としては、コーディング速度の壁に一つブチ当たったような気もする。
250: AdditionGame
実装に迷ってしまって、最初vector→めんどい→set→「あ、違ぇや」などの流れを踏んだ結果、非常に遅いSubmitになってしまった。反省。
227.05 Points
#include <queue> using namespace std; class AdditionGame { public: int getMaximumPoints(int A, int B, int C, int N) { priority_queue<int> pq; pq.push(A); pq.push(B); pq.push(C); int point = 0; for(int i = 0; i < N; i++){ int cur = pq.top(); pq.pop(); point += cur; pq.push(cur + (cur >= 1 ? -1 : 0)); } return point; } };
500: FoxSequence
全く褒められない解答。やる事は非常に単純であるので、きれいに書けるかどうかで真価が問われる問題だと思う。
これもresubmitで大きく点を下げている。が、それのおかげでとりあえず通ったのでまあ…。
173.36 Points
#include <string> #include <vector> using namespace std; #define NO string("NO") #define YES string("YES") class FoxSequence { public: string isValid(vector <int> seq) { if(seq.size() < 5) return NO; int p = 0; //1 2 1 2 1 // increase int m = seq[p + 1] - seq[p]; if (m <= 0) return NO; for(p++; p < seq.size() - 1; ){ int md = seq[p + 1] - seq[p]; if(md != m){ if(md > 0) return NO; break; } p++; } if(seq.size() - p < 4) return NO; // decrease m = seq[p + 1] - seq[p]; if(m >= 0) return NO; for(p++; p < seq.size() - 1; ){ int md = seq[p + 1] - seq[p]; if(md != m) break; p++; } if(seq.size() - p < 3) return NO; // equal if((m = seq[p + 1] - seq[p]) == 0){ for(p++; p < seq.size() - 1; ){ int md = seq[p + 1] - seq[p]; if(md != m){ break; } p++; } } if(seq.size() - p < 2) return NO; // increase m = seq[p + 1] - seq[p]; if (m <= 0) return NO; for(p++; p < seq.size() - 1; ){ int md = seq[p + 1] - seq[p]; if(md != m){ if(md > 0) return NO; break; } p++; } if(seq.size() - p - 1 < 1) return NO; // decrease m = seq[p + 1] - seq[p]; if (m >= 0) return NO; for(p++; p < seq.size() - 1; ){ int md = seq[p + 1] - seq[p]; if(md != m) return NO; p++; } return YES; } };