#include<bits/stdc++.h>
using namespace std;
const int M = 1000010;
long long a[M]={0};
int main()
{
int n;
cin>>n;
a[1]=1;a[2]=2;
for(int i=3;i<=M;i++)
a[i]=2*a[i-1]+a[i-2];
while(n--)
{
int k;
cin>>k;cout<<a[k]%32767<<endl;
}
return 0;
}
要在赋予数值时先取模
#include<bits/stdc++.h>
using namespace std;
const int M = 1000010;
long long a[M]={0};
int main()
{
int n;
cin>>n;
a[1]=1;a[2]=2;
for(int i=3;i<=M;i++)
a[i]=(2*a[i-1]+a[i-2])%32767;
while(n--)
{
int k;
cin>>k;cout<<a[k]<<endl;
}
return 0;
}
这么算肯定不行啊 得用算法优化啊 那个k都一百万以内了
再想想优化一下 看看规律哈哈
既然%32767
前期打表的时候可以加一个判断啊
加油
这个地方好多大神啊
我居然回答晚了
这题确实是基础
这还可以优化 可以试试杭电oj的题 确实锻炼算法
这种题最好是先找规律
不要直接暴力
多练练算法
看看别人的提交
基本都是位运算算法没有直接暴力解题的