算法1
(暴力枚举)
对于3000*3000的部分直接暴力
然后我们容易发现,对于C(3000,3) 已经超过了1e9,也就是在行数大于3000的每一行,我们只需要枚举C(n,2)即可,而n达到1e5的时候,C(n,2)就超过了1e9。
如果前面都没有的话,那么说明只能在C(n,1)的位置出现。计算答案的话,因为杨辉三角每一行的个数都比上一行多一个,所以等差数列求和即可,注意结果会炸int。
C++ 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+50;
int main(){
int n;cin>>n;
if(n==1){
cout<<1;
return 0;
}
for(int i=2;i<=3000;i++){
ll now=1;
for(ll j=1;j<=i;j++){
now=now*(i-j+1);
now/=j;
if(now>n) break;
if(now==n){
ll cnt=1ll*i*(i+1)/2;
cout<<cnt+j+1;
return 0;
}
}
}
for(int i=3000;i<=100000;i++){
ll cnt=1ll*i*(i-1)/2;
if(cnt==n){
cout<<1ll*i*(i+1)/2+3;
return 0;
}
if(cnt>n) break;
}
cout<<1ll*(n+1)*n/2+2<<endl;
return 0;
}
卧槽,谁都不服就服你
这样明明复杂度是够的,而且可以过。为什么都点踩。。
不知道hh,我默默的点了个支持
没事,踩越多也能形成特色👍