2020-09
发布时间:2021-02-23 15:20:02
称检测点查询
传送门
题意:找到离x,y最近的三个点
存所有的点到目标点的距离和id,将其按dis距离排序,输出前三个点的id标号。
#includebits/stdc++.h
using namespace std;
struct node{
double dis;
int id;
}s[100010];
int x,y;
double cal(int a,int b)//计算距离
{
return sqrt(pow(a-x,2)+pow(b-y,2)*1.0);
}
bool cmp(node a,node b)//排序cmp函数
{
return a.disb.dis||(a.dis==b.disa.idb.id);
}
int main()
{
int n,cnt=0;cinnxy;
for(int i=1;i=n;i++){
int a,b;cinab;
s[++cnt].id=i;
s[cnt].dis=cal(a,b);
}
sort(s+1,s+1+n,cmp);
for(int i=1;i=3;i++) couts[i].idendl;
}
风险人群筛查
传送门
题意:统计逗留和经过的人数。
判断是否在区域内
bool check(int x,int y){
if(x=xlx=xry=yuy=yd)
return 1;
return 0;
}
若当前点在区域内,cnt++表示连续cnt个点都在区域内。
if(check(x,y))
{
mark1=1;
cnt++;
if(cnt=k) mark2=1;
}else cnt=0;
#includebits/stdc++.h
using namespace std;
int n,k,t,xl,yd,xr,yu;
bool check(int x,int y){
if(x=xlx=xry=yuy=yd)
return 1;
return 0;
}
int main()
{
cinnktxlydxryu;
int jing=0,liu=0;
while(n--)
{
// mark1:此人是否经过
// mark2:此人是否逗留
// cnt:连续cnt次经过区域内
int mark1=0,mark2=0,cnt=0;
for(int i=1;i=t;i++)
{
int x,y;cinxy;
if(check(x,y))
{
mark1=1;
cnt++;
if(cnt=k) mark2=1;
}else cnt=0;
}
if(mark2) liu++;
if(mark1) jing++;
}
coutjingendlliuendl;
}