2017 CCPC 秦皇岛
ZOJ 3993 Safest Buildings
用面积交的方法,L < R - 2* r 的点概率相等 。 如果R-2*r<0 就是前面说的概率为1的情况。
可以根据平方直接判断。
/*************************************************************************
> File Name: safest buildings.cpp
> Author: touchme-o
> Mail: 1723186256@qq.com
> Created Time: 2017年11月01日 星期三 20时19分44秒
************************************************************************/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
struct P
{
int x , y ,id ;
LL l;
bool operator<(const P&a)const{
return l<a.l;
}
}p[105];
int n , R , r;
int main() {
// fstream cin("data.in");
int TT ; cin >> TT;
while(TT--) {
memset(p,0,sizeof(0));
cin>>n>>R>>r;
for(int i=0;i<n;i++) {
cin>>p[i].x>>p[i].y;
p[i].id = i+1;
p[i].l = 1LL*p[i].x * p[i].x + 1LL*p[i].y * p[i].y;
}
long long tmp = 1LL*(2LL *r - R) * (2LL*r - R);
sort(p,p+n);
// for(int i=0;i<n;i++) cout<<p[i].id<<" "<<p[i].l<<endl;
vector<int>ans;ans.clear();
if(p[0].l<=tmp) {
for(int i =0;i<n && p[i].l<=tmp ; i++) ans.push_back(p[i].id);
}
else {
for(int i=0;i<n&&p[i].l==p[0].l;i++) ans.push_back(p[i].id);
}
sort(ans.begin(), ans.end());
cout<<ans.size()<<endl;
for(int i=0;i<ans.size();i++) {
if(i==0) cout<<ans[i];
else cout<<" "<<ans[i];
}
cout<<endl;
}
return 0;
}