叉积

news/2024/11/14 18:37:01/文章来源:https://www.cnblogs.com/tzstlove/p/18540516

向量基本运算

点积

叉积

一.Transmitters

由叉积的基本定理得出,要判断一个点c再一条直线ab的左边还是右边,只要看(b-a)*(c-a)大于0还是小于0,对于这题,我们可以将左右边看成发射范围的半圆,因为要找出覆盖最多点的数量,所以最优解肯定有一个点再直径上,再通过叉积找出所有在这个点左侧的点。并且在初始化的时候,如果发现一个点到圆心的距离大于圆的半径,那这个点就不用考虑了。

点击查看代码
#include <iostream>  // 输入输出流
#include <iomanip>   // 输入输出格式控制
#include <fstream>   // 文件输入输出流
#include <sstream>   // 字符串输入输出流
#include <cmath>     // 数学函数
#include <string>    // 字符串操作
#include <vector>    // 动态数组容器
#include <queue>     // 队列容器
#include <stack>     // 栈容器
#include <set>       // 集合容器
#include <map>       // 映射容器
#include <algorithm> // 算法
#include <bitset>    // 位集容器
#include <stdio.h>   // 标准输入输出
using namespace std;
#define int long long
const int N = 1e6 + 5, M = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f3f3f3f3f;
double a[N], b[N];
double x, y, r;
double dis(double xx, double yy) // 计算距离
{return sqrt(1.0 * (x - xx) * (x - xx) + (y - yy) * (y - yy));
}
double cha(double xx, double yy, double xxx, double yyy) // 计算叉积
{return (xx - x) * (yyy - y) - (xxx - x) * (yy - y);
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);while (cin >> x >> y >> r, r >= 0){int n;cin >> n;int cnt = 0;for (int i = 1; i <= n; i++){int xx, yy;cin >> xx >> yy;if (dis(xx, yy) <= r) // 将点到圆心距离小于r的点放入{a[++cnt] = xx;b[cnt] = yy;}}int max1 = 0;for (int i = 1; i <= cnt; i++) // 枚举每一个点在半圆的直径上,计算其左侧的点{int s = 0;for (int j = 1; j <= cnt; j++){if (cha(a[i], b[i], a[j], b[j]) >= 0) // 如果叉积大于0,说明在左侧,等于0,则在直径上,都符合条件{s++;}}max1 = max(max1, s); // 记录最大的左侧点数}cout << max1 << "\n";}return 0;
}
二.TOYS

将一个纸板分成了n+1个部分,因为每个分割点的坐标x是递减的,所以可以想到二分,而每个部分则是由分割线右边的那块地方包含的,所以要判断每个点落在哪个部分,就是不断二分判断对于那个部分,点和分割线的叉积是否小于0。

点击查看代码
#include <iostream>  // 输入输出流
#include <iomanip>   // 输入输出格式控制
#include <fstream>   // 文件输入输出流
#include <sstream>   // 字符串输入输出流
#include <cmath>     // 数学函数
#include <string>    // 字符串操作
#include <vector>    // 动态数组容器
#include <queue>     // 队列容器
#include <stack>     // 栈容器
#include <set>       // 集合容器
#include <map>       // 映射容器
#include <algorithm> // 算法
#include <bitset>    // 位集容器
#include <stdio.h>   // 标准输入输出
#include <cstring>
using namespace std;
const int N = 100010, M = 20;
#define int long long
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f3f3f3f3f;
int x, y, n, m, x1, y3;
struct vv
{int x, y;
} a[N], b[N], p;
int cha(int mid)
{return ((a[mid].x - b[mid].x) * (p.y - b[mid].y)) - (a[mid].y - b[mid].y) * (p.x - b[mid].x);
}
int s[N];
int find() // 二分查找对于每个部分的叉积是否小于0
{int l = 1, r = n + 1;while (l <= r){int mid = (l + r + 1) / 2;if (cha(mid) <= 0){l = mid + 1;}else{r = mid - 1;}}return r;
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);while (cin >> n, n){cin >> m >> x >> y >> x1 >> y3;int cnt = 1;a[1].x = x, a[1].y = y, b[1].x = x, b[1].y = y3; // 先将盒子的起点的两端点记录数组for (int i = 2; i <= n + 1; i++){int l, r;cin >> l >> r;a[i].x = l;a[i].y = y;b[i].x = r;b[i].y = y3;}memset(s, 0, sizeof(s));while (m--) // 对于每个玩具,find找出其所在的部分,然后加1,找出最大值。{cin >> p.x >> p.y;s[find()]++;}for (int i = 1; i <= n + 1; i++){cout << i - 1 << ": " << s[i] << endl;}cout << "\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831974.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内核脏牛提权

脏牛靶机 已知靶机账号密码:msfadmin/msfadmin 靶机开启ssh服务开启靶机获取IP msfadmin/msfadmin登录 ifconfig #获取靶机IP得到靶机IP:192.168.213.247 开启kali ssh链接靶机 直接输入ssh msfadmin@192.168.213.247进行链接会出现报错 出现报错的原因是ssh客户端和服务器之…

[极客大挑战 2019]Secret

首页什么都没有,查看网页源码,发现有一个链接,提示found除去view-source访问,得到以下页面,点击secret直接查阅结束,没回显flag,依旧在卖关子。使用burp suite抓包获取返回的源码,找到注释中有个文件secr3t.php访问secr3t.php得到代码里说flag在flag.php里,直接访问fl…

今年测试这工资是认真的吗?

在如今的求职市场中,软件测试面试中的“八股文”几乎成为了一种必考内容。所谓“八股文”,指的是一系列标准化的技术面试题目,这些题目涵盖了测试理论、接口自动化测试、测试工具框架、性能测试、项目场景等多个方面...📝 博主首页 : 「码上生花」 ,同名公众号 :「伤心的…

开发人员,千万不要去碰那该死的业务参数,无论什么时候!

你好呀,我是歪歪。 前几天发了一个牢骚:本来只是单纯的吐槽一下,但是好多人对其中的细节比较感兴趣。 大家都是搞技术的嘛,对于“踩 BUG”这种喜闻乐见的事情,有兴趣是很正常的。 其实我这个 BUG,其实严格意义上不能叫做 BUG,因为和程序无关,甚至和技术的关系都不算大。…

java小课设:使用MySQL做一个聊天室

bro是个懒狗,耗时一个晚上,只写了一些基础功能,其他的可以根据需要自己添加实现思路:在MySQL数据库中设置一个message表,用来存储聊天信息,聊天界面输入的内容写入message表,用户程序每秒从MySQL中获取一次聊天记录,并加载进入自己的页面,实现聊天室。食用方法: Chat…

Quartz集群增强版_00.How to use?(如何使用)

Quartz集群增强版_00.How to use?(如何使用)转载请著名出处 https://www.cnblogs.com/funnyzpc/p/18540378开源地址 https://github.com/funnyzpc/quartz 表的基本结构 总的来说任务的配置及开发基本遵从上图的表的基本关系,除 app 以及 node 之外均需要手动手动配置,app…

开源三代示波器的高速波形刷新方案开源,支持VNC远程桌面,手机,Pad,电脑均可访问(2024-11-11)

说明: 1、本来这段时间是一年一度Hackaday硬件设计开源盛宴,但hackaday电子大赛在去年终结了。所以我开源个我的吧。 2、三代示波器的高速波形刷新方案,前两年就做好了,这两年忙H7-TOOL的更新比较多,三代示波器的更新就搁置了。但刷新方案是没问题的,开源分享给大家。 3、…

PSQL 环境安装配置

准备工作:安装包 plsqldev1400x64.msi 注册码 汉化包 chinese.exe 轻量级数据 instantclient_11_2 安装【PSQL】第一步大法操作! 默认的安装路径:C:\Program Files\PLSQL Developer 14安装【轻量级 instantclient_11_2】 复制或解压到 C:\Program Files\PLSQL Developer…

零声QT学习 一

int main(int argc, char *argv[]) {QApplication a(argc, argv);//QApplication a(argc, argv),针对QWidget应用程序,管理和设置Qt程序的运行//QGuiApplication a(argc, argv),针对非QWidget应用程序,如QQuick//QcoreApplication a(argc, argv),针对无界面的应用程序MainWindo…

【教程】第四章:任务与评论插件 —— 如虎添翼,顺利掌握

一起在 NocoBase 中创造精彩应用!这些教程将通过手把手的操作,帮助你全面掌握核心功能,激发灵感,打造并分享满足多样需求的应用。回顾上一节 小伙伴们还记得上一节的挑战任务吗?我们要为任务表配置 状态 和 附件 字段,并在任务列表里展示它们。别急,咱们先揭晓答案!状态…

wsl2踩坑日记(配置代理/zsh+p10k/Neovim)

1. proxy wsl --install Ubuntu-24.04 安装好 wsl 之后,测试了一下 v2rayN 的代理能不能正常使用(用 vultr 服务器搭建的校园网 ipv6 免流),发现可以 curl www.google.com,但是 sudo apt-get update 报错 Clearsigned file isnt valid, got NOSPLIT (does the network req…

基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要基于MIMO(Multiple-Input Multiple-Output)系统的SDR-AltMin混合预编码算法是一种先进的无线通信技术,它结合了凸优化和交替最小化技术来…