今天听了lcy教主的讲座
唯一的想法就是多刷题
那莫得办法
每天水几题呗
看着没A过几题的杭电有点小崩溃
1005一看我靠
写个暴力先
#include<bits/stdc++.h>
using namespace std;
int f[1000];
int main(){
int a,b,n;
f[1]=1,f[2]=1;
while(~scanf("%d%d%d",&a,&b,&n)){
if(a==0&&b==0&&n==0){
break;
}
for(int i=3;i<100;i++){
f[i]=(a*f[i-1]+b*f[i-2])%7;
}
for(int i=1;i<=99;i++){
cout<<f[i]<<" ";
}
cout<<endl;
}
return 0;
}
跑出来觉得1 1……之后都是以1 1开头循环的
结果写出来就wa了
#include<bits/stdc++.h>
using namespace std;
int f[1000];
int fun(){
for(int i=3;i<999;i++){
if(f[i]==1&&f[i-1]==1){
return i;
}
}
//return 0;
}
int main(){
int a,b,n;
f[1]=1,f[2]=1;
while(~scanf("%d%d%d",&a,&b,&n)){
if(a==0&&b==0&&n==0){
break;
}
for(int i=3;i<1000;i++){
f[i]=(a*f[i-1]+b*f[i-2])%7;
}
int T=fun()-2;
f[0]=f[T];
n%=T;
printf("%d\n",f[n]);
//cout<<endl;
}
return 0;
}
一查用矩阵快速幂
没学过线代硬伤
暑假要好好学
十分钟后发现我的方法没错。。。
。。。为什么我用f[i]==1&&f[i+1]==1是错的
而用f[i]==1&&f[i-1]==1再换公式就对了
蜜汁题目
#include<bits/stdc++.h>
using namespace std;
int f[10005];
int fun(){
for(int i=3;i<1000;i++){
if(f[i]==1&&f[i-1]==1){
return i;
}
}
}
int main(){
int a,b,n;
f[1]=1,f[2]=1;
while(scanf("%d%d%d",&a,&b,&n)!=EOF){
if(a==0&&b==0&&n==0){
break;
}
int i;
for(i=3;i<=1000;i++){
f[i]=(a*f[i-1]+b*f[i-2])%7;
}
int T=fun()-2;
f[0]=f[T];
n=n%T;
printf("%d\n",f[n]);
//cout<<endl;
}
return 0;
}
后来发现函数里面return 0有问题???
然后+1就疯狂RE????
今儿知道Runtime Error
(INTEGER_DIVIDE_BY_ZERO)
是除0错误
可是真的不会除0啊啊啊啊
好迷啊
睡觉吧