HDU4995Revenge of kNN(暴力)
来源:互联网 发布:linux编写c程序 编辑:程序博客网 时间:2024/05/21 07:11
题目:HDU4995Revenge of kNN(暴力)
题目大意:给你一维的N个点,每个点有X坐标,和V值,然后现在给你M个修改,接下来的M行每行给你一个Qi(前面的N个点的序号1--N)。要求每次取离X(Qi)最近的K个邻居,然后将X(Qi)的值改为(这K个邻居的值的平均值),最后输出这M次修改值的和。如果距离相同的话就取原先读入下标小的那个邻居。
解题思路:先将这N个点按照X的值排序 + 暴力。Qi是下标不是X,这个没看清楚,坑死了。
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;const int N = 1e5 + 5;typedef long long ll;map<int, int> vis;int T, n, m, k;struct Node {ll x;double v;int id;}node[N];int cmp (const Node &a, const Node &b) {return a.x < b.x;}double solve () {double ans = 0;vis.clear();sort (node, node + n, cmp);for (int i = 0; i < n; i++) vis[node[i].id] = i;int pos, tmp;int num;for (int i = 0; i < m; i++) {scanf ("%d", &num);pos = vis[num - 1];//printf ("%d\n", pos);int p1 = pos - 1;int p2 = pos + 1;double sum = 0;tmp = 0;while (tmp < k) {if (p1 == -1)//边界要注意sum += node[p2++].v;else if (p2 == n)//边界sum += node[p1--].v;else {if (node[pos].x - node[p1].x < node[p2].x - node[pos].x)sum += node[p1--].v;else if (node[pos].x - node[p1].x > node[p2].x - node[pos].x)sum += node[p2++].v;else if (node[p1].id < node[p2].id)sum += node[p1--].v;elsesum += node[p2++].v;}tmp++;}//printf ("%lf\n", sum/ k);ans += sum / k;node[pos].v = sum / k;}return ans;}int main () {scanf ("%d", &T);while (T--) {scanf ("%d%d%d", &n, &m, &k);for (int i = 0; i < n; i++) {scanf ("%I64d%lf", &node[i].x, &node[i].v);node[i].id = i;}printf ("%.6lf\n", solve());}return 0;}
0 0
- HDU4995Revenge of kNN(暴力)
- hdu 4995 Revenge of kNN(暴力枚举)
- 【HDU】4995 Revenge of kNN 暴力
- HDU 4995Revenge of kNN(暴力)
- hdu 4432 Sum of divisors(暴力)
- HDU 5019 Revenge of GCD (暴力)
- hdu 5486 Difference of Clustering(暴力)
- Kinds of Fuwas(暴力+组合数学)
- ZOJ 2975Kinds of Fuwas(暴力)
- HDU 5578 Friendship of Frog(暴力)
- hdu 5021 Revenge of kNN II(树状数组)
- hdu 4995 Revenge of kNN
- HDU 4995 Revenge of kNN
- hdu 4995 Revenge of kNN
- HDU 4995 Revenge of kNN
- UVa 120 - Stacks of Flapjacks 解题报告(暴力)
- poj 2109 Power of Cryptography(暴力枚举)
- UVA - 10344 - 23 out of 5 (暴力)
- 大三女生在面对各种语言面前有些迷茫
- hdu 5001 Walk(概率)
- 基于视频图像的识别算法
- HDU 1711 Number Sequence
- mtk82平台上通过libcamera_client.so调用camera预览流程
- HDU4995Revenge of kNN(暴力)
- c语言结构体指针初始化
- VC++调用大漠插件的方法
- 新Android学习笔记
- 的化工区规划是更好的感情和违法
- 大整数相乘------输出两个不超过100位的大整数的乘积
- JNI处理中文的编码转换问题
- OpenGL学习入门之VS2010环境配置
- 常用算法思想一(分治思想)