TopCoder Member SRM 501 DIV2
Rating: 843(灰)→944(緑)
やった!緑に復帰やっとできた!
やっと、とはいえ、一番最初の元の緑はマグレなので、やっとそれなりに実力がついてきたかなという感じ。
259.27 Points
250: FoxProgression
純粋に等差数列と等比数列の判定を2つの関数に分けていて、当初それぞれの結果が同一になる(== 1つとしてカウントされる)状態を想定しておらず、あわてて少ない修正でそれらを判定すべく関数にnextとかいう汚い逆参照くっつけた。のでこんなコードになってます。
209.27 Points
#include <iostream> #include <sstream> #include <string> #include <vector> using namespace std; class FoxProgression { public: int canBeArithmetic(vector<int>& seq, int& next){ int x = seq[1] - seq[0]; if(x == 0) return 0; for(int i = 1; i < seq.size() - 1; i++){ int t = seq[i + 1] - seq[i]; if(t != x) return 0; } next = seq[seq.size() - 1] + x; return 1; } int canBeGeometric(vector<int>& seq, int& next){ if(seq[1] % seq[0]) return 0; int x = seq[1] / seq[0]; for(int i = 1; i < seq.size() - 1; i++){ if(seq[i + 1] % seq[i]) return 0; int t = seq[i + 1] / seq[i]; if(t != x) return 0; } next = seq[seq.size() - 1] * x; return 1; } int theCount(vector <int> seq) { if(seq.size() <= 1) return -1; int nx, ny; int res = canBeArithmetic(seq, nx) + canBeGeometric(seq, ny); if(res == 2 && nx == ny) res -= 1; return res; } };
500: FoxPlayingGame
わからなかった。分数クラスを作ってそれで幅優先探索するコードは書けたが、DPに持ち込めなかった。DPだとは分かっていたが…
そもそも分数クラスとかは求められていないという説も。
1000:
Unopened