题目描述
题目描述
33DAI 最近看到了这样一段代码:
#include <bits/stdc++.h>using namespace std;
long long n;
long long ans;
int main()
{
cin >>n;
ans = 0;
for (long long i = 1; i <= n; i++)
{
for (long long j = 1; j <= i; j++)
{
long long now = 0;
for (long long k = 1; k <= i; k++)
if (k % 10 == 0)
now += j;
ans += now;
}
}
cout << ans << "\n";
return 0;
}
33DAI 一看最大的数据范围:n≤105n≤105,这一秒时限不是妥妥的超时了吗!
请你想办法优化这段代码,提交一个输出和这个代码一样,但不会超时的代码。
>显然如果你直接提交上面的代码,是能拿到本题 30 分的。
输入格式
第一行一个整数 nn。
输出格式
一行一个整数,要求和题目描述中的代码输出一致。
输入1:
33
输出1:
13645
数据规模与约定
对于 100%100% 的数据,1≤n≤1051≤n≤105。
- 子任务 1(30 分):1≤n≤1001≤n≤100
- 子任务 2(30 分):1≤n≤50001≤n≤5000
- 子任务 3(40 分):没有特殊限制。
#include<bits/stdc++.h> using namespace std; long long n,k; long long ans,now; int main() { cin >>n; ans = 0; k=n; for (double i = 10; i <= n; i++) { // for (long long j = 1; j <= i; j++) // { //ans +=1.0*(i/10)*i*((i/2)*(1+i)); long long k=1.0*(1.0*i/2)*(i+1); ans+=int(i/10)*k; // } } cout << ans << "\n"; return 0; }