Ants
来源:互联网 发布:淘宝宝贝详情源代码 编辑:程序博客网 时间:2024/05/16 07:49
Ants
题意:给出n堆食物以及n只蚂蚁的二维位置,问怎么分配蚂蚁以及食物,使得任意两只蚂蚁走的路线(直线)不会出现交点
解法:其实仔细思考就会发现,蚂蚁走距离最短的距离就不会出现相交,因为如果两只蚂蚁路线相交,那么他们互换食物的距离会更短(三角形两边之和大于第三边),利用这点就可以做了
#include <iostream>using namespace std;#include <stdio.h>#include <stdlib.h>#include <math.h>#include <algorithm>double a[200][2], b[200][2], k1, k2;int n, ans[200] = {0}, t[200] = {0};bool f[200] = {0};double sqr(double x) { return x*x;}int main() { freopen("ants.in","r",stdin); freopen("ants.out","w",stdout); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i][0] >> a[i][1]; for (int i = 1; i <= n; i++) cin >> b[i][0] >> b[i][1]; for (int i = 1; i <= n; i++) ans[i] = i; ans[0] = 1e9; bool flag; while (1) { flag = true; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (i != j) { double len1 = sqrt(sqr(a[i][0]-b[ans[i]][0])+sqr(a[i][1]-b[ans[i]][1])) + sqrt(sqr(a[j][0]-b[ans[j]][0])+sqr(a[j][1]-b[ans[j]][1])); double len2 = sqrt(sqr(a[i][0]-b[ans[j]][0])+sqr(a[i][1]-b[ans[j]][1])) + sqrt(sqr(a[j][0]-b[ans[i]][0])+sqr(a[j][1]-b[ans[i]][1])); if (len1-len2 > 1e-9) { flag = false; swap(ans[i], ans[j]); } } if (flag) break; } for (int i = 1; i <= n; i++) cout << ans[i] << endl; fclose(stdin);fclose(stdout);}
0 0
- Ants
- Ants
- Ants
- Ants
- Ants
- Ants
- Ants
- Ants
- Ants
- Ants
- ants
- Ants
- Ants
- Ants
- Ants
- Ants
- zoj3279 Ants
- poj3565 Ants
- IOS(APP) 微信接入实践
- 这3个技巧,能帮你节省50%的工作和学习时间!
- bin文件的安装方法
- 让InstallShield 2015 Limited Edition for Visual Studio 2015在原工程基础上生成一个全新的安装程序
- Field 'id' doesn't have a default value
- Ants
- Window——屏幕相关的知识点
- annotation-config, annotation-driven, compont-scan 区别
- ios 设置tableview左滑删除按钮的相关属性
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- 在Unity3D的网络游戏中实现资源动态加载
- DevOps对于企业IT的价值
- ssh2框架的搭建(一)
- can't open /dev/ttySAC0: No such file or directory