[1st. Aug. 16] NOIP 2011 计算系数——纠结了很久才发现原来第一次做就大体做对了
2016-08-01 20:56
357 查看
我实际上并不懂杨辉三角,是搜了一下定义才知道的。总之我搜到了定义之后,先花了一会,用一维数组把杨辉三角打了出来。但那时我还没有完全参透这个题目,只是准备打出那一半的a=1, b=1 的数据,然后雏形是这样的:用一维数组tri 储存杨辉三角,tri[0] = 0, tri[1] =1, 并 用 for 循环将第K 行的三角打出来。然后输出tri[m] . 这就是我的第一份代码。两分。
然后我又想了一下,决定尝试做另一半数据,总体不变,我又加上了几条语句。
while(n--)ans=(ans*a)%10007;
while(m--)ans=(ans*b)%10007;
加上这两句后就是我的第二份代码了。三分。然后我表情凝重了。
于是我就面对下面这一堆东西发了一会的呆。
#include<iostream>
using namespace std;
int tri[12345]={0,1};
int main(){
<span style="white-space:pre"> </span>int a,b,k,n,m,mark=0;
cin>>a>>b>>k>>n>>m;
for(int i=0;i<=k;i++){
mark++;
for(int j=mark;j>=1;j--)
tri[j]=(tri[j]+tri[j-1])%10007;
}
int ans=tri[m];
while(n--)ans=(ans*a)%10007;
while(m--)ans=(ans*b)%10007;
cout<<ans<<endl;
return 0;
} 直至我发现最本质的错误是,我把杨辉三角对应行中应该输出的数字搞错了,不是m 而应该是 k -m +1,也即是n +1。改了之后为八分。但是这一次我没有慌张,我又盯着题目说明发呆了一会,又发现一个眼瞎导致的错误……下面是终极代码。
#include<iostream>
using namespace std;
long long tri[12345]={0,1};
int main(){
long long a,b,k,n,m,mark=0;
cin>>a>>b>>k>>n>>m;
for(int i=0;i<=k;i++){
mark++;
for(int j=mark;j>=1;j--)
tri[j]=(tri[j]+tri[j-1])%10007;
}
long long ans=tri[n+1];
while(n--)ans=(ans*a)%10007;
while(m--)ans=(ans*b)%10007;
cout<<ans<<endl;
return 0;
} 是的,数据类型定小了。另外,虽然mark 这个变量是多余的,而且删掉以后能节省三行代码的空间,但我已经精疲力尽了。以上。
然后我又想了一下,决定尝试做另一半数据,总体不变,我又加上了几条语句。
while(n--)ans=(ans*a)%10007;
while(m--)ans=(ans*b)%10007;
加上这两句后就是我的第二份代码了。三分。然后我表情凝重了。
于是我就面对下面这一堆东西发了一会的呆。
#include<iostream>
using namespace std;
int tri[12345]={0,1};
int main(){
<span style="white-space:pre"> </span>int a,b,k,n,m,mark=0;
cin>>a>>b>>k>>n>>m;
for(int i=0;i<=k;i++){
mark++;
for(int j=mark;j>=1;j--)
tri[j]=(tri[j]+tri[j-1])%10007;
}
int ans=tri[m];
while(n--)ans=(ans*a)%10007;
while(m--)ans=(ans*b)%10007;
cout<<ans<<endl;
return 0;
} 直至我发现最本质的错误是,我把杨辉三角对应行中应该输出的数字搞错了,不是m 而应该是 k -m +1,也即是n +1。改了之后为八分。但是这一次我没有慌张,我又盯着题目说明发呆了一会,又发现一个眼瞎导致的错误……下面是终极代码。
#include<iostream>
using namespace std;
long long tri[12345]={0,1};
int main(){
long long a,b,k,n,m,mark=0;
cin>>a>>b>>k>>n>>m;
for(int i=0;i<=k;i++){
mark++;
for(int j=mark;j>=1;j--)
tri[j]=(tri[j]+tri[j-1])%10007;
}
long long ans=tri[n+1];
while(n--)ans=(ans*a)%10007;
while(m--)ans=(ans*b)%10007;
cout<<ans<<endl;
return 0;
} 是的,数据类型定小了。另外,虽然mark 这个变量是多余的,而且删掉以后能节省三行代码的空间,但我已经精疲力尽了。以上。
相关文章推荐
- NOIP 2011 Day2 T1 计算系数
- [NOIP2011提高组day2]-1-计算系数
- NOIP 2011 Senior 4 - 计算系数
- NOIP2011 day2 第一题 计算系数
- 【NOIP2011】计算系数
- codevs 1137||NOIP 2011 计算系数 二项式定理 解题报告
- NOIP2011 计算系数
- NOIP2011 day2 第一题 计算系数
- [NOIP2011] 洛谷P1313 计算系数
- 计算系数(NOIP2011提高组Day2T1)
- vijos p1739(计算系数(NOIP 2011系列))
- NOIP2011计算系数详解
- 计算系数(NOIP2011 day2)
- NOIP2011复赛提高组day2(A:计算系数 B:聪明的质监员 C:观光公交)
- NOIP2011 计算系数 解题报告(数论)
- NOIP2011 计算系数
- 题目:[NOIP 2011]计算系数
- NOIP 2011 提高组 复赛 day2 factor 计算系数
- NOIP2011 计算系数 题解(超详细)
- 洛谷P1313 [NOIP2011提高组Day2T1]计算系数