思路:
创建结构体,将物品的价格和编号封装起来,便于查找。按题目所叙述的两种情况给f数组赋值,提交代码运行显示超时只有50分,尝试再次利用题目中所给提示进行修改,还是50。。。。。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,N;
int f[10001];
typedef struct Price{
int A;//每个商品的价格
int num;//每个商品的编号
}price;
int main()
{
cin>>n>>N;
price p[201];
for(int i=1;i<=n;i++){
p[0].A=0;
p[0].num=0;
cin>>p[i].A;
p[i].num=i;
}
for(int i=0;i<N;i++){
for(int j=0;j<n;j++){
if(i>=p[n].A)
{
f[i]=p[n].num;
}
if(i>=p[j].A&&i<p[j+1].A){
f[i]=p[j].num;
}
}
}
int times=1,sum=0;
for(int i=0;i<N;i++){
if(f[i]==f[i+1]){
times++;
}
else{
sum+=times*f[i];
times=1;
}
}
cout<<sum;
}
超时减少数组的使用:
#include<bits/stdc++.h>
using namespace std;
int n,N;
int A[201];
int main()
{
cin>>n>>N;
int sum=0;
for(int i=1;i<=n;i++){
cin>>A[i];
}
for(int i=1;i<=n;i++){
A[0]=0;
if(i<n){
sum+=i*(A[i+1]-A[i]);
}
else if(i==n){
sum+=i*(N-A[i]);
}
}
cout<<sum;
return 0;
}