题目描述
题目描述
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 ans,n,k;
int main()
{
cin>>n;
ans=0;
k=n;
for(double i=10;i<=n;i++)
{
long long k=1.0*1*(i/2)*(i+1),now=0;
ans=ans+int(i/10)*k;;
}
cout<<ans<<"\n";
return 0;
}