秦皇岛站2019CCPC A.Angel Beats
时间:2019-09-28
本文章向大家介绍秦皇岛站2019CCPC A.Angel Beats,主要包括秦皇岛站2019CCPC A.Angel Beats使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:平面内给定n个点,q次询问,给次给定一个点P,问这个点与平面内n个点可以组成多少直角三角形,其中(n+q)个点互不相等
思路:
分别考虑P点作直角顶点和非直角顶点。这个题思路很简单,就是看如何实现简单而且不会tle!!!
对于直角顶点和非直角顶点代码都比较简单,求后者有点离线的思想。
这里想说的就是map的用法,自定义小于运算符,使得在map中查找的时候,统一斜率的向量都会加起来,虽然在map中依然会保存多个不同的向量。(听说是现场一血的写法,中山大学大佬nb)
算法复杂度大概n*n*log(n)(由于n和p的范围一样,这里统一同n表示),运行时间10s左右
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long const int N = 2005; struct P { ll x, y; P(ll xx=0, ll yy=0) { x = xx; y = yy; } P base()const{ if (x < 0 || (x == 0 && y < 0))return P(-x, -y); return *this; } bool operator<(const P&b)const { P p1 = base(); P p2 =b.base(); //如果共线,考虑是相同的索引 return p1.x*p2.y<p1.y*p2.x; } P operator-(const P&b)const { return P(x - b.x, y - b.y); } }a[N],qur[N]; int n, q; map<P, int>m; ll ans[N]; int main() { while (~scanf("%d%d", &n, &q)) { memset(ans,0,sizeof(ans)); for (int i = 0; i < n; i++)scanf("%lld%lld", &a[i].x, &a[i].y); for (int i = 0; i < q; i++)scanf("%lld%lld", &qur[i].x, &qur[i].y); for (int i = 0; i < q; i++) { //求解作为直角顶点 m.clear(); for (int j = 0; j < n; j++) m[a[j] - qur[i]]++; for (int j = 0; j < n; j++) { P p = a[j] - qur[i]; p = P(-p.y, p.x); ans[i] += m.count(p) ? m[p] : 0; } //由于两条直角边都会枚举,所以除2 ans[i] /= 2; } for (int i = 0; i < n; i++) { //作为非直角顶点,每次枚举点i,作为直角顶点,更新全部的q组询问点 m.clear(); for (int j = 0; j < n; j++) { if (i != j)m[a[j] - a[i]]++; } for (int j = 0; j < q; j++) { P p = qur[j] - a[i]; p = P(-p.y, p.x); ans[j] += m.count(p) ? m[p] : 0; } } for (int i = 0; i < q; i++)printf("%lld\n", ans[i]); } return 0; }
原文地址:https://www.cnblogs.com/gzr2018/p/11605356.html
- 将多张图片无缝拼接方法
- 【Golang语言社区】H5游戏开发-纯javascript模仿微信打飞机小游戏
- 模式识别---图像二值化
- 双边过滤算法
- C++对于大型图片的加载缩放尝试
- ijg库解码超大型jpeg图片
- JS基础(下)
- Go语言_并发篇
- AttributeError: 'int' object has no attribute 'log'
- makefile在编译的过程中出现“except class name”
- 调参过程中的参数 学习率,权重衰减,冲量(learning_rate , weight_decay , momentum)
- 【Golang语言社区】游戏编程--js开发实现简单贪吃蛇游戏(20行代码)
- mxnet框架样本,使用C++接口
- faster-rcnn中ROI_POOIING层的解读
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Tensorflow 2.x】检验MKL
- kubernetes dashboard insecure配置
- seqtk抽取reads
- Version of Delve is too old for this version of Go【Goland Debug】报错
- python之turtle模块-黄金螺线
- python之turtle模块-生化危机
- Python之turtle模块-饼状图
- python之turtle模块-弧线
- Python之turtle模块-画圈圈
- Python之turtle模块-正多边形
- synchronized 锁的原理
- Centos: 添加一个IP地址
- 能动手绝不多说:开源评论系统remark42上手指南
- R语言入门之因子及常用函数
- R语言入门之R包的安装