TopCoder SRM 617 Div1 Easy MyLongCake
問題
長いケーキがある。
nの約数のうちn以外の人数の友達が来る可能性がある。
どの人数の友達が来ても、ケーキを連続する区間で同じ長さだけ配れるようにするため、
切れ目を入れておく、切れ目の数の最小値を求めよ。
制約条件
n≦100000
方針
ケーキは連続する区間で配らなければならないので、単に切るべき場所
(2人ならn/2, n, 3人ならn/3, 2n/3, n……)にフラグを立てていくだけでよい。
ソースコード
bool f[110000]; class MyLongCake { public: int cut(int n) { memset(f, 0, sizeof(f)); for(int i = 2; i <= n; i++) if(n % i == 0){ for(int j = i; j <= n; j += i) f[j] = 1; } int ans = 0; rep(i, n + 1) if(f[i]) ans++; return ans; } };