#include<stdio.h>
#include<algorithm>
#define N 100005
using namespace std;
struct node
{
int x,id;
double v;
} a[N],b[N];
int val[N];
bool cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int t,n,m,k,i,u,num,x,y,q,pos;
double sum,s;
//freopen("a.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
for(i=1; i<=n; i++)
{
scanf("%d%lf",&a[i].x,&a[i].v);
a[i].id=i;
b[i]=a[i];
}
sort(b+1,b+1+n,cmp);
for(i=1; i<=n; i++)
val[i]=b[i].x;
s=0;
for(i=1; i<=m; i++)
{
scanf("%d",&q);
u=a[q].x;
num=k;
sum=0;
pos=lower_bound(val+1,val+1+n,u)-val;//找到当前点在排序序列中的位置
//printf("pos=%d\n",pos);
x=pos-1;
y=pos+1;
while(x>=1&&y<=n)
{
if(u-b[x].x<b[y].x-u)
{
sum+=b[x].v;
x--;
num--;
}
else if(u-b[x].x>b[y].x-u)
{
sum+=b[y].v;
y++;
num--;
}
else//距离差值相同时,取先出现的位置
{
if(b[x].id<b[y].id)
{
sum+=b[x].v;
x--; num--;
}
else
{
sum+=b[y].v;
y++; num--;
}
}
if(num==0)
break;
}
if(num!=0)
{
while(x>=1&&num!=0)
{
sum+=b[x].v;
x--;
num--;
}
while(y<=n&&num!=0)
{
sum+=b[y].v;
y++;
num--;
}
}
//printf("sum=%lf\n",sum);
s+=sum/k;//要先除以k,然后加到一起,不可以加到一起,最后除以k。
b[pos].v=sum/k;
}hdu4995
printf("%.6lf\n",s);
}
return 0;
}
#include<stdio.h>
#include<algorithm>
#define N 100005
using namespace std;
struct node
{
int x,id;
double v;
}a[N];
bool cmp(node a,node b)
{
return a.x<b.x;
}
int mark[N];
int main()
{
int t,n,m,k,num,p,x,y,i,q;
double s,sum,u;
//freopen("a.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++)
{
scanf("%d%lf",&a[i].x,&a[i].v);
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
for(i=1;i<=n;i++)
{
mark[a[i].id]=i;
}
s=0;
for(i=1;i<=m;i++)
{
scanf("%d",&q);
p=mark[q]; u=a[p].x;
x=p-1; y=p+1; sum=0; num=k;
while(x>=1&&y<=n)
{
if(u-a[x].x==a[y].x-u)
{
if(a[x].id<a[y].id)
{
sum+=a[x].v;
x--; num--;
}
else
{
sum+=a[y].v;
y++; num--;
}
}
else if(u-a[x].x<a[y].x-u)
{
sum+=a[x].v;
x--; num--;
}
else
{
sum+=a[y].v;
y++; num--;
}
if(num==0)
break;
}
if(num!=0)
{
while(x>=1&&num!=0)
{
sum+=a[x].v; x--; num--;
}
while(y<=n&&num!=0)
{
sum+=a[y].v; y++; num--;
}
}
a[p].v=sum/k;
s+=a[p].v;
}
printf("%.6lf\n",s);
}
return 0;
}
hdu 4995 模拟
最新推荐文章于 2017-09-17 20:50:55 发布