睿爸信奥-【临阵磨枪】练习赛(第一场)- T3
2024-10-22 05:02:41
目录
题面
题目背景
徐老师很胖,长宽高比例为1:1:1,他每次走路都要滚来滚去~~现在假设在一个平面上有 n 个没有公共点公共点的圆。徐老师要从点(x1,y1)走到(x2,y2)。问你最少要经过多少圆 的边界。保证这两个点都不在圆的边界上。
输入格式
第一行一个整数 n,1<=n<=50。
接下来三行每行 n 个整数,分别表示 n 个圆的圆心和半径,格式如下:
x1,x2...xi...xn
y1,y2...yi...yn
r1,r2...ri...rn
-1000<=xi,yi<=1000,1<=ri<=1000
最后一行四个整数X1,Y1,X2,Y2,-1000<=x1,y1,x2,y2<=1000。
输出格式
一个整数,意义如上。
思路
找出起点和终点是否有多少个圆包起来。
要注意:
的情况
code
#include<bits/stdc++.h>
using namespace std;
int n, x_1, x_2, y_1, y_2, ans;
int x[55];
int y[55];
int r[55];
int ju(int xo, int yo, int xt, int yt) {//距离公式
return sqrt((xo - xt) * (xo - xt) + (yo - yt) * (yo - yt));
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> x[i];
for (int i = 1; i <= n; i++) cin >> y[i];
for (int i = 1; i <= n; i++) cin >> r[i];
cin >> x_1 >> y_1 >> x_2 >> y_2;
for(int i =1;i<=n;i++){
int s1 = ju(x_1,y_1,x[i],y[i]);
int s2 = ju(x_2,y_2,x[i],y[i]);
if(s1 < r[i] && s2 < r[i]);//排除一起包起来的情况
else if(s1 < r[i] or s2 < r[i]) ans++;
}
cout << ans << endl;
return 0;
}
最新文章
- MongoDB学习笔记三—增删改文档上
- Golang汇编命令解读
- Mysql示例数据库employees.sql导入问题
- Mac中使用port升级gcc版本
- JS闭包的理解
- 【BZOJ 3196】二逼平衡树 线段树套splay 模板题
- Virtual Box中 CentOS双网卡设置
- 简单工厂模式—>;工厂模式
- poj2828 Buy ticket
- uclibc,eglibc,glibc,Musl-libc之间的区别和联系
- Springboot@Configuration和@Bean详解
- align-item 和 align-content的区别
- ElasticSearch5.X的冷热数据架构
- UNIGUI上传文件
- Vue-router的基本用法
- 网站被XMR恶意挖矿
- GTK安装
- WCF服务端调用client.
- springboot中maven加入本地jar
- FastReport.Net 无限页高(连续纸小票)