巨人与鬼

news/2025/3/16 5:52:18/

巨人和鬼

一组n个巨人正与n个鬼进行战斗,每个巨人的武器是一个质子炮, 它可以把一串质子流射中鬼而把鬼消灭。质子流沿直线行进,在击中鬼时就终止。巨人决定采取下述策略。他们寻找鬼配对,以形成n个巨人─鬼对,。然后每个巨人同时向他选取的鬼射出一串质子流。我们知道,让质子流互相交叉是很危险的。因此巨人选择的配对方式应该使质子流都不会交叉。假定每个巨人和每个鬼的位置都是平面上的一个固定点,并且没有三个位置共线, 求一种配对方案。

解题思路:由题意知,其必存在一个解,这里利用分治的思想,利用一条线,把原区域分为两个区域,然后对这两个区域递归求解。

分割思路:

1.先找左下角节点

2.把其余点按其与左下角节点角度大小排序

3.从小到大遍历,当一边的巨人与鬼的数量相同时(这里利用正负1相加为0判断),储存答案,递归求解

分割图如下:

用p1 –p6分割

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node {int biao, x, y;//序号和坐标bool id;//标识巨人还是鬼
};
int n;
node p[1000],ji;
int ans[1000];
bool cmp(node &a, node &b) {return a.y != b.y ? a.y < b.y : a.x < b.x;
}
bool cmp1(node &a, node &b) {return (atan2((a.y - ji.y),(a.x - ji.x))<atan2((b.y - ji.y),(b.x - ji.x)));
}
void go(int l,int r) {if (l > r)return;sort(p + l, p + r + 1, cmp);//获取最左下的点作为基点ji = p[l];sort(p + l + 1, p + r + 1, cmp1);//根据其他点与基点连线和水平线的角度进行排序int c1 = 0, c2 = 0;int k = r;while (!(ji.id != p[k].id&&c1 == c2)) {if (p[k].id == ji.id)c1++;//c1是相同标识的数量else c2++;//c2是与基点不同标识的数量k--;}ans[p[k].biao] = ji.biao;//只有当c1与c2的数量相等且基点与当前点标识不同时才能配对ans[ji.biao] = p[k].biao;go(l + 1, k - 1);//左半部分go(k + 1, r);//右半部份
}
int main(void) {while (cin >> n) {for (int i = 1; i <= n; i++) {cin >> p[i].x >> p[i].y >> p[i].id;p[i].biao = i;}go(1, n);for (int i = 1; i <= n; i++)cout << ans[i]<<" ";}system("pause");
}

http://www.ppmy.cn/news/947669.html

相关文章

鬼故事

第一个故事 <你相信谁?> 有一年登山社去登山&#xff0c;其中有一对感情很好的情侣在一起。 当他们到山下准备攻峰时&#xff0c;天气突然转坏了&#xff0c;但是他们还是要执意的上山去。于是就留下那个女的看营地&#xff0c;可过了三天都没有看见他们回来。 …

贞子的在日本历史出现过的轨迹

http://tieba.baidu.com/p/200526723 让我们来贞子的在日本历史出现过的轨迹。 铃木光司的《午夜凶铃》有关贞子的传说是介於虚与实之间的东西。它记特异功能者&#xff08;可念写&#xff09;山村志津子被一大学教授伊熊平八郎博士发现而成名&#xff0c;后因实验失败而被社…

温柔得叫人想死:日本电影《火宅之人》手记

《火宅之人》是日本导演深作欣二在八十年代监督的情感伦理片。女主角之一由后来出演《桃色》的松坂庆子主演。《桃色》中的她虽然魅力犹存&#xff0c;但已经失去了年轻时的青春、活力和性感。所以《火宅之人》应该是她最红时期的作品&#xff0c;也是她最性感和最暴露的一次演…

当AI作画入侵鬼畜区……

金磊 衡宇 发自 凹非寺量子位 | 公众号 QbitAI 家人们&#xff0c;大精彩&#xff01; AI作画这事&#xff0c;现在竟然已经开始“入侵”B站鬼畜区了……而且异常火爆。 你绝对想象不到它俩碰撞在一起能擦出怎样的火花。 不信&#xff1f; 咱现在就来玩个“猜原图是啥”的游戏。…

还记得被东方project弹幕支配的恐惧吗

还记得被东方project弹幕支配的恐惧吗 ——————————————————————如何用construct2做一个简易的弹幕游戏 游戏链接http://1.projectboli.applinzi.com/ 当然&#xff0c;开始的开始&#xff0c;还是需要大家下载安装free版的construct2&#xff0c;具体怎…

C 语言 - 存储时期

分类&#xff1a; a. 静态存储时期 static storage duration b. 自动存储时期 automatic storage duration静态存储时期 static storage duration &#xff08;所有&#xff09;具有文件作用域的变量具有静态存储时期&#xff0c;该变量在程序执行期间一致存在。 【注意】 a. 具…

旅游卡加盟代理合伙人模式软件开发

旅游卡加盟代理合伙人模式是近年来逐渐兴起的一种旅游产业发展模式&#xff0c;它通过将旅游卡加盟商与代理商紧密结合&#xff0c;实现资源共享、风险共担、合作共赢的目标。而软件开发作为旅游卡加盟代理合伙人模式的重要技术支持&#xff0c;对于该模式的实施和发展起着至关…

Grafana中table的使用技巧

将多个指标数据显示在同一个Table中&#xff0c;需要用到Transform功能&#xff0c;利用Transform功能可以将数据进行处理只显示想要的数据&#xff1a;