CCF CSP 20211201
序列查询
题目见官网。
第一次写的代码
按照题目一步步来的,结果就是超时了。50分。
#include<iostream>
using namespace std;
int main()
{
int n,N;
cin>>n>>N;
int A[n];
A[0]=0;
int i;
for(i=1;i<=n;i++)
{
cin>>A[i];
}
int x,sum=0;
for(x=0;x<=N-1;x++)
{
for(i=0;i<n;i++)
{
if(A[i]<=x && x<A[i+1])
sum=sum+i;
}
if(A[n]<=x)
sum=sum+n;
}
cout<<sum;
return 0;
}
第二次写的代码
令A【n+1】=N,两种f(x)情况可以合并。并且sum(A)的计算方法也可以简化。(A[i-1]-A[i])*i就是(A[i-1]-A[i])个相同的f(x)=i的结果。100分。
#include<iostream>
using namespace std;
int main()
{
int n,N;
cin>>n>>N;
int A[n+1];
A[0]=0;
A[n+1]=N;
int i;
for(i=1;i<=n;i++)
{
cin>>A[i];
}
int sum=0;
for(i=1;i<=n;i++)
{
sum=sum+(A[i+1]-A[i])*i;
}
cout<<sum;
return 0;
}