1 条题解

  • 0
    @ 2025-8-24 21:36:15

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Grisses
    苹果没有色彩,它只是在反射760~622nm波长的光而已,带来色彩的不过是大脑皮层上的电信号罢了~

    搬运于2025-08-24 21:36:15,当前版本为作者最后更新于2022-02-08 20:48:57,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题面

    建议加上标签“枚举,暴力”

    首先,看看数据范围,500 直接暴力,也就 n2n^2

    对于一个点 A=(x,y)A=(x,y),我们枚举所有的图形:

    1. 如果这是一个矩形 (x1,y1,x2,y2)(x_1,y_1,x_2,y_2),判断 min(x1,x2)<x<max(x1,x2)\min(x_1,x_2)<x<\max(x_1,x_2)min(y1,y2)<y<max(y1,y2)\min(y_1,y_2)<y<\max(y_1,y_2),成立就表示 AA 在这个矩形中。

    2. 如果这是一个圆,判断 AA 到圆心的距离是否小于半径即可。

    代码:

      #include<bits/stdc++.h>
      using namespace std;
      int n,m,ans;
      struct node{
          char op;
          double a,b,c,d;
      }a[505];//储存所有的图形
      double x,y;
      double len(double x1,double y1,double x2,double y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}//求距离
      int main()
      {
          scanf("%d%d\n",&n,&m);
          for(int i=1;i<=n;i++){
              scanf("%c%lf%lf%lf",&a[i].op,&a[i].a,&a[i].b,&a[i].c);
              if(a[i].op=='r')scanf("%lf",&a[i].d);
              scanf("\n");
          }
          for(int i=1;i<=m;i++){
              scanf("%lf%lf",&x,&y);
              ans=0;
              for(int j=1;j<=n;j++){
                  if(a[j].op=='r'){
                      if(min(a[j].a,a[j].c)<x&&x<max(a[j].a,a[j].c)&&min(a[j].b,a[j].d)<y&&y<max(a[j].b,a[j].d))ans++;
                  }
                  else{
                      if(len(x,y,a[j].a,a[j].b)<a[j].c)ans++;
                  }
              }//暴力
              printf("%d\n",ans);
          }
          return 0;
      }
    
    • 1

    信息

    ID
    1307
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者