题大概是这样的:给出 n,求 a+b+c=n 中 a,b,c 的方案数,a,b,c 须满足 0<a<b<c≤n。保证 n≤1200。
由于我太卷了,从开始的 O(n2) 卷到了现在的 O(n),想问一下大佬可能做到时间复杂度为 O(1) 吗
先摆代码(我都不知道怎么卷出来的):
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n;
cin >> n;
int ans=0;
for (int a=1;a<n/3;++a){
ans+=ceil((n-a)/2.0)-1-a;
}
cout<<ans<<endl;
return 0;
}
形象化的话答案就是:∑i=1n⌈(n−i)/2⌉−1−i。
请求各位大佬解答,上面的代码能否做到 O(1) 级别qwq。