博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4995
阅读量:7120 次
发布时间:2019-06-28

本文共 2942 字,大约阅读时间需要 9 分钟。

hot3.png

#include 
#include 
#define MAXN 100010#define MAXK 15#define CLR(vec) memset(vec, 0, sizeof(vec))struct point{    int id;    int pos;}table[MAXN];double val[MAXN];       /*val  of the id*/int knn[MAXN][MAXK];    /*nearest k pos for id*/static void build_one_knn(struct point *tb, int idx, int n, int k){    int lidx = idx - 1;    int ridx = idx + 1;    int cnt  = 0;    int pos  = tb[idx].pos;    while(cnt < k){        do{            if(lidx < 0){                knn[idx][cnt] = tb[ridx++].id;                break;            }            if(ridx >= n){                knn[idx][cnt] =  tb[lidx--].id;                break;            }            int flag = (tb[ridx].pos - pos) - (pos - tb[lidx].pos);                            if(flag < 0){                knn[idx][cnt] =  tb[ridx++].id;            }else if (flag > 0){                knn[idx][cnt] =  tb[lidx--].id;            }else{                if(tb[ridx].id < tb[lidx].id){                    knn[idx][cnt] = tb[ridx++].id;                }else{                    knn[idx][cnt] =  tb[lidx--].id;                }            }        }while(0);        cnt++;    }}static void build_knn(int n, int k){    int i, j, idx;    struct point element;    for(i = 0; i < n; i++){            scanf("%d%lf", &(element.pos), &val[i]);            element.id = i + 1;         /*Notice:element.id = real id + 1*/            for(j = i - 1; j >= 0 && table[j].pos > element.pos; j--){                            table[j + 1] = table[j];            }            table[j + 1] = element;    }    for(idx = 0; idx < n; idx++)            build_one_knn(table, idx, n, k);}int  main(void){#ifdef DEBUG      freopen("in", "r", stdin);      freopen("out","w", stdout);#endif      int cases, currCase;      double ans, tmp;      int n, m, k, cnt, qidx;      scanf("%d", &cases);      for(currCase = 1; currCase <= cases; currCase++){                CLR(table);                CLR(knn);                CLR(val);                scanf("%d%d%d", &n, &m, &k);                ans = 0.0;                build_knn(n, k);    #ifdef DEBUG        int i, j;        printf("printf nearest pos\n");        for(i = 0; i < n; i++){                printf("%d -> ", i);                      j = 0;                while(0 != knn[i][j]){                    printf("%d ", knn[i][j] - 1);                          j++;                }                printf("\n");        }#endif                while(m--){                    tmp = 0.0;                    scanf("%d", &qidx);                    cnt = 0;                    while(0 != knn[qidx - 1][cnt]){                            tmp += val[knn[qidx - 1][cnt] - 1];                            cnt++;                    }                    tmp /= cnt;                    ans += tmp;                    val[qidx - 1] = tmp;                }                printf("%.6lf\n", ans);      }    return 0;}

转载于:https://my.oschina.net/u/572632/blog/344173

你可能感兴趣的文章
ajax封装
查看>>
例题9-6 UVa11400 Lighting System Design(DP)
查看>>
PAT1087 All Roads Lead to Rome (30)(最短路径+dfs+回溯)
查看>>
Arcgis Engine 添加一个Symbol符号样式步骤
查看>>
kafka 控制台命令
查看>>
alpha冲刺10
查看>>
睡觉了~~
查看>>
【LeetCode】28 - Implement strStr()
查看>>
Node.js与Sails~Model数据模型
查看>>
[转]没有找到 MFC42D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。解决方法!...
查看>>
我再也不-或许永远不-用zend studio-受够了!
查看>>
软件工程(2019)第三次作业
查看>>
Java性能调优
查看>>
第 6 章 存储 - 039 - Data Volume 之 bind mount
查看>>
异步IO
查看>>
MySQL
查看>>
【转】Linux内核结构详解
查看>>
DevExpress学习03——label控件的背景色问题
查看>>
Cass环境下光标无显示
查看>>
linux系统监控命令汇总
查看>>