HDU 4995 Revenge of kNN
来源:互联网 发布:淘宝点卡进货渠道 psn 编辑:程序博客网 时间:2024/05/21 14:52
题意:t组样例,有n个点,给出每个点的位置和价值,给出m个点的下标进行查询,将这m个点的价值变为离它最近的k个点的价值的平均值,如果有两个点到它的距离相等,那么要下标小的那个,最后输出n个点的总价值
解题思路:模拟.用一个结构体存储n个点的位置、价值和下标,将这n个点按照位置排序,用id数组记录这n个点排序后的位置,举个例子:p[0].x=2、p[0].v=1、p[0].id=0,p[1].x=1、p[1].v=4、p[1].id=1,那么排序后就是p[0].x=1、p[0].v=4、p[0].id=1,p[1].x=2、p[1].v=1、p[1].id=0,那么id[p[0].id]=0,也就是说id[1]=0,刚开始下标是1,排序后下标是0,同理id[p[1].id]=id[0]=1,刚开始下标是0,排序后下标是1,因为给出的m个下标是排序前的下标,所以要用id数组对应排序后的位置。浮点数输入用%lf,输出用%f
代码:
#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cstdio>#include <cmath>using namespace std;struct P{ int x; double v; int id;}p[100005];bool cmp(P p1,P p2){ return p1.x<p2.x;}int id[100005];int main(){ int t; scanf("%d",&t); while(t--) { int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=0;i<n;i++) { scanf("%d%lf",&p[i].x,&p[i].v); p[i].id=i; } sort(p,p+n,cmp); for(int i=0;i<n;i++) { id[p[i].id]=i; } double ans=0; while(m--) { double sum=0; int q; scanf("%d",&q); q-=1; int y=id[q]; int l=y-1,r=y+1; for(int i=0;i<k;i++) { if(l<0) { sum+=p[r].v; r++; } else if(r>=n) { sum+=p[l].v; l--; } else { if(p[y].x-p[l].x==p[r].x-p[y].x) { if(p[l].id>p[r].id) { sum+=p[r].v; r++; } else { sum+=p[l].v; l--; } } else if(p[y].x-p[l].x>p[r].x-p[y].x) { sum+=p[r].v; r++; } else { sum+=p[l].v; l--; } } } sum/=k; p[y].v=sum; ans+=sum; } printf("%.6f\n",ans); } return 0;}
阅读全文
0 0
- hdu 4995 Revenge of kNN
- HDU 4995 Revenge of kNN
- hdu 4995 Revenge of kNN
- HDU 4995 Revenge of kNN
- 【HDU】4995 Revenge of kNN 暴力
- hdu 4995 Revenge of kNN (模拟)
- hdu 4995 Revenge of kNN(模拟)
- HDU 4995Revenge of kNN(暴力)
- hdu 4995 Revenge of kNN(暴力枚举)
- 【HDU 5021】 Revenge of kNN II
- 【杂题】 HDOJ 4995 Revenge of kNN
- HDU 5021 Revenge of kNN II 线段树
- 【HDU】5021 Revenge of kNN II 树状数组
- BC D Revenge of kNN II hdu 5021
- hdu 5021 Revenge of kNN II(树状数组)
- 【BestCoder】 HDOJ 5021 Revenge of kNN II
- HDOJ 5021 Revenge of kNN II
- hdu 5021 Revenge of kNN II(树状数组,离散化,二分)
- 矩阵归零
- 接口和抽象类异同点
- XYNU OJ 1090—1099基础题(适合于C语言初学者)
- 这20个正则表达式,让你少写1,000行代码
- ubuntu gnome 16.04 配置
- HDU 4995 Revenge of kNN
- IDEA本地执行 or 调试Spark Application的方法
- 跨函数使用malloc函数
- 详解如何将TensorFlow训练的模型移植到Android手机
- 密匙交换与加密
- POJ
- HDU2156 分数矩阵【数学计算+水题】
- python 进行深入学习
- ZOJ 2112 & BZOJ 1901 Dynamic Rankings(主席树 单点更新 区间第K大)