题目链接:https://vjudge.net/problem/HihoCoder-1835

题解:首先我们应该能想到到达图形的距离最近那肯定是垂直过去,也就是坐标变为(x1 - k, x2 - k, x3 - k...),假设图形原点的坐标为(x10, x20, x30 ...),如果某个xi - k == xi0 了,那么我们就不在让他减小了,也就是说当前维已经达到了最优的情况,因此我们每次减去一个最小的xi即可,减到不能减为止,也就是该点已经到达了图形的边界,其实这样找的时候是可以O(1)找出来的,但训练的时候是二分写的,复杂度也只是加个log而已

二分:

#include <bits/stdc++.h>
using namespace std;
#define eps 1e-8
struct node {double x[110];
}p[55];
int n, k;
double r;
double judge(int pos, double x, double ans, double cnt) {return ans - cnt * x ;
}
int main() {int T;double ll, rr, mid;double cnt, tmp, ans;int id;scanf("%d", &T);while(T--) {scanf("%d %d", &n, &k);scanf("%lf", &r);for(int i = 0; i <= n; i++)for(int j = 1; j <= k; j++)scanf("%lf", &p[i].x[j]);for(int i = 1; i <= n; i++) {rr = -1.0;ll = 0;ans = 0;cnt = 0;for(int j = 1; j <= k; j++) {ans += fabs(p[0].x[j] - p[i].x[j]);if(fabs(p[0].x[j] - p[i].x[j]) > eps) {cnt += 1;}if(fabs(p[0].x[j] - p[i].x[j]) > eps && (rr < 0 || rr > fabs(p[0].x[j] - p[i].x[j])))rr = fabs(p[0].x[j] - p[i].x[j]);}cnt = 0;//  cout << fabs(judge(i, ll) - r) << endl;while(fabs(judge(i, ll, ans, cnt) - r) > 0.000001) {for(int j = 1; j <= k; j++) {if(fabs(p[0].x[j] - p[i].x[j]) < eps) continue;if(p[0].x[j] > p[i].x[j]) p[i].x[j] += ll;else p[i].x[j] -= ll;}rr = -1.0;ll = 0;cnt = 0;ans = 0;for(int j = 1; j <= k; j++) {if(fabs(p[0].x[j] - p[i].x[j]) > eps && (rr < 0 || rr > fabs(p[0].x[j] - p[i].x[j])))rr = fabs(p[0].x[j] - p[i].x[j]);ans += fabs(p[0].x[j] - p[i].x[j]);if(fabs(p[0].x[j] - p[i].x[j]) > eps) {cnt += 1;}}while(rr - ll > eps) {mid = (ll + rr) / 2;if(judge(i, mid, ans, cnt) <= r) {rr = mid;} else {ll = mid;}}}for(int j = 1; j <= k; j++) {if(fabs(p[0].x[j] - p[i].x[j]) < eps) printf("%.4f", p[i].x[j]);else if(p[0].x[j] > p[i].x[j]) printf("%.4f", p[i].x[j] + ll);else printf("%.4f", p[i].x[j] - ll);printf("%c", " \n"[j == k]);}}}return 0;
}
/*
1 2
1
0 0
1.1 0.45 1*/

O(1)找:

#include <bits/stdc++.h>
using namespace std;
#define eps 1e-8
struct node {double x[110];
}p[55];
int n, k;
double r;
double judge(int pos, double x, double ans, double cnt) {return ans - cnt * x ;
}
int main() {int T;double ll, rr, mid;double cnt, tmp, ans;int id;scanf("%d", &T);while(T--) {scanf("%d %d", &n, &k);scanf("%lf", &r);for(int i = 0; i <= n; i++)for(int j = 1; j <= k; j++)scanf("%lf", &p[i].x[j]);for(int i = 1; i <= n; i++) {rr = -1.0;ll = 0;ans = 0;cnt = 0;for(int j = 1; j <= k; j++) {ans += fabs(p[0].x[j] - p[i].x[j]);if(fabs(p[0].x[j] - p[i].x[j]) > eps) {cnt += 1;}if(fabs(p[0].x[j] - p[i].x[j]) > eps && (rr < 0 || rr > fabs(p[0].x[j] - p[i].x[j])))rr = fabs(p[0].x[j] - p[i].x[j]);}cnt = 0;while(1) {//    cout << " *\n";for(int j = 1; j <= k; j++) {if(fabs(p[0].x[j] - p[i].x[j]) < eps) continue;if(p[0].x[j] > p[i].x[j]) p[i].x[j] += ll;else p[i].x[j] -= ll;}rr = -1.0;ll = 0;for(int j = 1; j <= k; j++)if(fabs(p[0].x[j] - p[i].x[j]) > eps && (rr < 0 || rr > fabs(p[0].x[j] - p[i].x[j])))rr = fabs(p[0].x[j] - p[i].x[j]);cnt = 0;ans = 0;for(int j = 1; j <= k; j++) {ans += fabs(p[0].x[j] - p[i].x[j]);if(fabs(p[0].x[j] - p[i].x[j]) > eps) {cnt += 1;}}if(ans <= eps + 1) {ll = 0;break;} if(ans - cnt * rr <= r + eps) {ll = (ans - r) / cnt;break;} ll = rr;}for(int j = 1; j <= k; j++) {if(fabs(p[0].x[j] - p[i].x[j]) < eps) printf("%.4f", p[i].x[j]);else if(p[0].x[j] > p[i].x[j]) printf("%.4f", p[i].x[j] + ll);else printf("%.4f", p[i].x[j] - ll);printf("%c", " \n"[j == k]);}}}return 0;
}
/*
1 2
1
0 0
1.1 0.45 1*/

2018北京网络赛 HihoCoder - 1835 K-Dimensional Foil II 计算几何 贪心 二分相关推荐

  1. ICPC2018 北京网络赛 HihoCoder 1835 K-Dimensional Foil II (K维空间降维)

    题目链接:https://cn.vjudge.net/problem/HihoCoder-1835 先把圆心移动到原点,对于所求的点,一定是已知点的k维坐标同时减去一个数,找到这个能减去的最大的数就行 ...

  2. ACM-ICPC 2018 北京网络赛:K-Dimensional Foil II

    #1835 : K-Dimensional Foil II 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 "K-Dimensional Foil" i ...

  3. ACM-ICPC 2018 北京网络赛:K-Dimensional Foil II 一题多解

    博客目录 原题 题目链接 #1835 : K-Dimensional Foil II 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 "K-Dimensional ...

  4. Saving Tang Monk II HihoCoder - 1828(2018北京网络赛三维标记+bfs)

    <Journey to the West>(also <Monkey>) is one of the Four Great Classical Novels of Chines ...

  5. 2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟

    2016 ICPC 北京网络赛 A - The Book List 题意:每本书有所属种类,给出原生的存放方式,求按新的方式存放的样子. tags:坑到心态爆炸的题==  直接堆进vector里搞的, ...

  6. icpc网络赛第二场K Meal

    icpc网络赛第二场K Meal 题意: 有n个人,n个菜, 现在n个人轮流吃菜,起初S中有n个菜,第i个人会在还没拿走的菜中随机选一个,拿走第j个菜的概率为ai,j∑k∈Sai,k\frac{a_{ ...

  7. 2018宁夏网络赛 B Goldbach (米勒拉宾素数测试)

    2018宁夏网络赛 B Goldbach (米勒拉宾素数测试) 题目链接 题目大意: 给你一个偶数n (2<n<=1e18) 让你把n分解成两个素数的和.(如果有多个输出任意一个) 解题思 ...

  8. HihoCoder 1835 K-Dimensional Foil II ICPC2018 北京网络赛

    http://www.cnblogs.com/DevilInChina/p/9691126.html 这个dalao 的思路 设平移球心到原点后 当前飞船坐标为 p(y_1,y_2,..,y_k) 球 ...

  9. 2018 icpc北京网络赛C cheat 模拟

    这题就是一个模拟.比赛时候还有三个多小时,当时也没有开别的题,终于等到了模拟.(本弱鸡模拟选手终于有时间写模拟了). 反正写模拟最主要的就是要自己思路清晰,写之前我自己开了一个txt,吧每个人的游戏策 ...

最新文章

  1. C指针7:指针作为函数返回值
  2. Web服务端性能提升实践
  3. php http传参数,http - PHP的URL传参数(英文句号变成了下划线)的问题,求解释。...
  4. HW2017笔试编程题
  5. DirectX 9高层着色语言介绍3——语言基础(2)
  6. java泛型学习一:解惑继承
  7. 论文浅尝 - ISWC2020 | KnowlyBERT: 知识图谱结合语言模型补全图谱查询
  8. python-pycharm控制台输出带颜色
  9. python剑指offer替换空格_《剑指Offer》字符串 替换空格
  10. TensorFlow2.0:tensorboard使用
  11. Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
  12. java web filter 入口_springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径
  13. dede 鼠标移到标题处显示完整标题
  14. spool.exe 出错 无法打印
  15. 诺基亚n1平板电脑刷机教程_诺基亚N1 完整包线刷升级或救砖教程(不分台版;国行)...
  16. jsp登录并实现邮箱激活功能
  17. 给你一个全自动的屏幕适配方案(基于SW方案)!—— 解放你和UI的双手
  18. 干货 实例 | 数字化时代的传统行业转型升级
  19. Node.js 删除本地文件/文件夹
  20. 释放自我。回归本性。要成功。

热门文章

  1. HTML、CSS、JS实现的HTML、CSS、JS编辑器
  2. 推荐几款炫酷的基于jquery的页面特效
  3. STM32烧录错误【PDSC: Sequence Execution failed error-Debug access failed - cannot read address 0xE00FFFE】
  4. 索尼高桥洋回应电视高定价:符合市场定位
  5. 一篇文章给你详细介绍交换机堆叠
  6. 算法----------海岛个数问题
  7. acl审计软件_如何评价审计软件idea?
  8. C语言(最孤单的数) 质数的判断以及输出0~100内的质数
  9. 微信小小屠龙攻略服务器,小小屠龙实用技巧攻略合集
  10. [控制基础] 定时器TIM的PWM输出+用积分思想分析PWM对直流减速有刷电机的控制(基于STM32F103+CubeMX+HAL)