改了无数次还是WA TT 要不要这么坑
先放着了
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int pi[1001],ti[1001];
int t,n,i,sum;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&pi[i]);
}
ti[0]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&ti[i]);
}
double sum=0,maxp=0,temp;
int pos=1;
for(i=1;i<=n;i++)
{
sum+=pi[i];
temp=sum*1.0/i;//当前的平均价格
// printf("---%d %lf\n",i,temp);
if(temp>maxp)
{
maxp=temp;
pos=i;
}
}
double maxt=ti[1];
sum=pi[1];
for(i=2;i<=pos;i++)
{
sum+=pi[i];
if(ti[i]-ti[i-1]>maxt)maxt=ti[i]-ti[i-1];
}
// printf("--%d\n",pos);
// printf("---%.6lf\n",maxt);
for(i=pos+1;i<=n;i++)
{
// printf("pass\n");
if(ti[i]-ti[i-1]>maxt)break;
else {
sum+=pi[i];
pos++;
}
}
printf("%.6lf %.6lf\n",maxt,sum*1.0/pos);
}
return 0;
}
/*
2
5
3 4 1 9 2
1 2 5 7 9
*/
AC代码
/*这道题有点坑。。比赛时有两道这个为背景的买面包。搞混了。 (lazier Or lazy)。
这道题 买面包 。人睡觉时。。客人来了就走。不会叫醒人。。
贪心。如果第从i个人开始买不到面包 。那他后面的人是肯定买不到的。如果第i个人买到了。那么前面的人
一定会买到。。
这里有个坑爹的地方。。更新平均值时 在maxtime<t[i+1]-t[i]的时候更新。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 1011
using namespace std;
int p[N],t[N],Maxtime;
double money,sum,w;
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
Maxtime=0;
money=0;
sum=0;
w=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&t[i]);
}
for(int i=1;i<=n;i++)
{
sum+=p[i];
if(Maxtime<t[i]-t[i-1])
{
Maxtime=t[i]-t[i-1];
}
if(i==n)
{
if(money<sum/i)
{
money=sum/i;
w=Maxtime;
}
continue;
}
if(Maxtime<t[i+1]-t[i]&&money<sum/i)//这里注意。个人认为是减少sum/i的次数。精度不丢失.
{
money=sum/i;
w=Maxtime;
}
}
printf("%.6f %.6f\n",w,money);
}
}