9.24 网易雷火笔试
第二题 ac
#include <bits/stdc++.h>
using namespace std;
struct user{
float x,y;
int b;
int c;
};
struct area{
int type;
float dx,dy,dx1,dy1;
float cx,cy,cr;
bool inArea(user a){
if(type == 0){
if(sqrt((a.x - cx) * (a.x - cx) + (a.y - cy) * (a.y - cy)) <= cr) return true;
}else{
if(a.x >= dx && a.x <= dx1 && a.y >= dy && a.y <= dy1)return true;
}
return false;
}
};
bool q2out(user q2,vector<area> a){
for(area s : a){
if(s.inArea(q2)) return true;
}
return false;
}
bool q1q2in(user q1,user q2,vector<area> a){
unordered_set<int> us;
for(int i = 0;i < a.size(); ++i){
if(a[i].inArea(q1)) us.insert(i);
}
for(int i = 0;i < a.size(); ++i){
if(a[i].inArea(q2) && us.count(i)){
return true;
}
}
return false;
}
int main() {
int n,m,q;
cin>>n>>m>>q;
float x,y,b,c;
int type;
float dx,dy;
float cx,cy,cr;
int q1,q2;
vector<user> t(n);
vector<area> a(m);
for(int i = 0;i < n;++i){
cin>>x>>y>>b>>c;
t[i].x = x;
t[i].y = y;
t[i].b = b;
t[i].c = c;
}
for(int i = 0;i < m;++i){
cin>>type;
a[i].type = type;
if(type == 1){//矩形
for(int j = 0;j < 4;++j){
cin>>dx>>dy;
a[i].dx = a[i].dx > dx ? dx : a[i].dx;
a[i].dy = a[i].dy > dy ? dy : a[i].dy;
a[i].dx1 = a[i].dx1 < dx ? dx : a[i].dx1;
a[i].dy1 = a[i].dy1 < dy ? dy : a[i].dy1;
}
}else if(type == 0){//圆形
cin>>cx>>cy>>cr;
a[i].cx = cx;
a[i].cy = cy;
a[i].cr = cr;
}
}
for(int i = 0;i < q;++i){
cin>>q1>>q2;
if(t[q1 - 1].c == t[q2 - 1].c){
if(t[q2 - 1].b != 1)cout<<1<<endl;//q2有隐身buff
else cout<<0<<endl;//q2没有隐身buff,在草内或草外q1都可以看见
}else{
if(t[q2 - 1].b == 1){//q2有隐身buff
cout<<0<<endl;
}else{//q2没有隐身buff
if(!q2out(t[q2 - 1],a)|| q1q2in(t[q2 - 1],t[q1 - 1],a))//q1,q2在同一草内 || q2在草外
{
cout<<1<<endl;
}else{
cout<<0<<endl;
}
}
}
}
}
查看10道真题和解析