CF269Div2ProC
这道题目乍一看以为是很复杂的搜索,搜索各种情况,就没有细想。其实只要找规律加枚举就好了,夫神比赛时间做出来,膜拜夫神。
http://codeforces.com/contest/471/problem/C
找到规律就好办了,每一层至少一个2,表示最左侧,然后右侧没加一个要加3,没保持上层比下层小,所以至少是0+1+…h-1个room, 每个room用3,
剩下的只要堆在最底层就可以,满足3的倍数,于是算法成型
LL Room(LL n)
{
LL ans=0;
for(LL i=0;;i++)
{
LL num=i*(i+1)/2;
LL remain=n-(i+1)*2-num*3;
if(remain<0) break;
if(remain%3==0) ans++;
}
return ans;
}
时间复杂度是n=(i+1)/2+3/2*i*(i+1) 中i的结果
i=(sqrt(4+24n)-4)/6=O(sqrt(n))
时间复杂度是O(sqrt(n))