题意:给出N,问可以组装成不同的层。
思路:发现第一层的mod3=2,第二层的mod3=1,第三层的mod3=0,第四层的mod3=2......然后我们判断N是否足够建立该层最少的所需,第i层所需=3*n*(n-1)/2+2*n,for循环里的i也要开longlong ,不然超时,别问我为什么知道。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 int main(){ 6 ll n; 7 cin>>n; 8 ll sum=0; 9 int m=n%3; 10 ll y; 11 if(m==1) y=2; 12 else if(m==2) y=1; 13 else if(m==0) y=3; 14 for(ll i=y;;i+=3){ 15 ll x=(i*(i-1)/2)*3+2*i; 16 if(x>n) break; 17 else sum++; 18 } 19 cout<<sum<<endl; 20 }