SCUPI 第十四周编程作业 SCU 题目笔记

大一纯纯新手学习~
可能会有很多种解法(欢迎评论!)
自己的随手笔记,多多包涵
对了
左老师YYDS

题面:

描述 不知你是否注意到,四川大学每年都会在各宿舍楼里放老鼠药,以解决学生宿舍的老鼠问题。
今年,学校的领导为了更好的展开灭鼠的行动,引进了一项新的技术:SCU(Super Cat Union)。
它是通过两只机器猫对宿舍楼的扫描来判断老鼠的所在,然后采取相应的措施。
这下可惹急了我们的FatMouse,它通过努力,终于找到了SCU的一个bug…

假设两只猫的工作范围各是一个球,猫位于球中心。在三维空间中两个球的相交点构成一个平面(假设在本题中两个球总是相交的)。
当老鼠在这个相交点构成的平面上时,SCU无法检测到老鼠的存在。 现在我们给出某一时刻两个机器猫的位置和他们工作范围的半径,
请问当FatMouse在某一个位置(x,y,z)上时,SCU是否能检测到FatMouse?

输入 输入的第一行为总的测试数据组数n。接下来一共有n行,每行代表一组测试数据。
每组测试数据包括11个整数,前面4个是SCU第一个机器猫所在的位置和它的工作半径,接下来的4个是第二个机器猫的位置和工作半径。
最后3个数是FatMouse的位置。

输出 对应每一组输入数据,判断FatMouse是否会被检测到。如果FatMouse能被检测到,输出Yes,否则,输出No。

//判题通道:http://acm.scu.edu.cn/soj/problem.action?id=1085
//提示:可以通过vjudge判题,选择SOJ 查找ID1085即可

测试用例
Input

3
0 0 0 8 10 0 0 8 5 5 5
0 0 0 8 10 0 0 8 5 0 0
0 0 0 8 10 0 0 8 0 8 0

Output

No
No
Yes

One Possible Version:

应该是一道简单几何题
通过读题获得:
已经掌握的情报(11个变量)
第一只猫: (x1,y1,z1) r1
第二只猫: (x2,y2,z2) r2
鼠鼠:(x,y,z)
那我们便可以求出
d1=pow((x-x1), 2)+pow((y-y1), 2)+pow((z-z1), 2)
d2=pow((x-x2), 2)+pow((y-y2), 2)+pow((z-z2), 2)
这是鼠鼠到两只小猫咪的距离平方
Case1:
如果d1>pow(r1,2)且d2>pow(r2,2)
那么鼠鼠已经摆脱了小猫咪的视线
这时候鼠鼠摆脱了SCU的追赶
Case2:
在平面上鼠鼠要卡BUG需要满足什么条件呢?
其实把两个球方程做差就可以求出来了!
m1=pow((x-x1), 2)+pow((y-y1), 2)+pow((z-z1), 2)-pow(r1,2);
m2=pow((x-x2), 2)+pow((y-y2), 2)+pow((z-z2), 2)-pow(r2,2);
m1-m2==0即可!

所以AC代码

#include<iostream>
#include<cmath>
using namespace std;
void supercat(int x1,int y1,int z1,int r1,int x2,int y2,int z2,int r2,int x,int y,int z){
	int d1=pow((x-x1), 2)+pow((y-y1), 2)+pow((z-z1), 2)-pow(r1,2);//求差值 
	int d2=pow((x-x2), 2)+pow((y-y2), 2)+pow((z-z2), 2)-pow(r2,2);
	//cout<<d1<<" "<<d2<<endl;
	if(d1-d2==0||(d1>0&&d2>0)){
		printf("No\n");
	}else{
		printf("Yes\n");
	}
}
int main(){
	int kk;
	cin>>kk;
	while(kk--){
		int x1,y1,z1,r1,x2,y2,z2,r2,x,y,z;
		cin>>x1>>y1>>z1>>r1>>x2>>y2>>z2>>r2>>x>>y>>z;
		supercat(x1,y1,z1,r1,x2,y2,z2,r2,x,y,z);
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值