过程:
1、暴力求解,超时;
2、优化:利用等差数列,只计算栋栋的数字;
3、仍然有百分之14的错误,继续优化:这次的num是在上次num的基础上计算得到。
注意:
1、我这个解法不需要把每个数字都设置成long long;
2、关于等差数列:
代码1(有百分之14的错误):
#include<iostream>
#include<vector>
using namespace std;
vector<int> v;
int main() {
long long n,k,t;
cin>>n>>k>>t;
long long num=1;
v.push_back(num);
t--;
long long a1=1,an=n;
for(long long i=1; i<=t; i++) {
num=(1+( ( 1 + i * n ) * i * n ) / 2 ) % k;
v.push_back(num);
}
long long sum=0;
for(vector<int>::iterator it=v.begin(); it!=v.end(); it++) {
sum+=*it;
}
cout<<sum;
return 0;
}
代码2(正确):
#include<iostream>
#include<vector>
using namespace std;
vector<int> v;
int main() {
int n,k,t;
cin>>n>>k>>t;
long long num=1;
v.push_back(num);
t--;
long long a1=1,an=n;
for(int i=1; i<=t; i++) {
num=(num+( ( a1 + an ) * n ) / 2 ) % k;
v.push_back(num);
a1=an+1;
an=an+n;
}
long long sum=0;
for(vector<int>::iterator it=v.begin(); it!=v.end(); it++) {
sum+=*it;
}
cout<<sum;
return 0;
}