今夜我做起了上届蓝桥杯的一道大题,让我深有感触,在蓝桥官网上总算磕磕绊绊地把这道题做到了满分,其中有参考其他博客的思路,毕竟难做的题才更有助于自己提升,所以现在就写了一篇博客来记录一下这道题。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n=0;
ll low=0;
ll C(ll loww,ll highh){
ll res=1;
for(ll i=1;i<=highh;i++){
res*=loww;
res/=i;
loww--;
if(res>n) return res;
}
return res;
}
bool find(ll line){
ll l=2*line,r=n;
while(l<r){
ll mid=(l+r)/2;
if(C(mid,line)==n){
low=mid;
return true;
}
else if(C(mid,line)>n){
r=mid-1;
}
else{
l=mid+1;
}
}
if(C(l,line)==n){
low=l;
return true;
}
return false;
}
int main(){
cin>>n;
if(n==1){
cout<<1;
return 0;
}
for(ll k=17;k>=1;k--){
if(find(k)){
cout<<low*(low+1)/2+k+1;
break;
}
}
}
新手小白,欢迎来踢
|