试题 历届真题 杨辉三角形【第十二届】【省赛】【研究生组】
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
解题思路:暴力算法,模拟杨辉三角的生成过程并判断当前新生成元素是否为N。后面数据一大,明显超时了,所以只pass了50%
pass 50%的代码:
#include <iostream>
using namespace std;
const int MAXN=1e6;
int N=1e9+123456;
int layer1[MAXN];
int layer2[MAXN];
int len1;
int len2;
long long cnt=1;
void init(){
len1=1;
len2=len1+1;
}
bool generateNextLayer(){
layer2[0]=1;
cnt++;
for(int i=1;i<len2-1;i++){
layer2[i]=layer1[i-1]+layer1[i];
cnt++;
if(layer2[i]==N)
return true;//true,表示找到N
}
layer2[len2-1]=1;
cnt++;
for(int i=0;i<len2;i++)
layer1[i]=layer2[i];
len1++;
len2++;
return false;//false,表示未找到N
}
int main()
{
cin>>N;
if(N==1)
cout<<"1"<<endl;
else{
init();
while(!generateNextLayer());
cout<<cnt<<endl;
}
return 0;
}