2 条题解

  • 0
    @ 2025-10-8 16:53:54
    #include<bits/stdc++.h>
    using namespace std;
    struct node{int lx,rx,ly,ry;}a[110];
    int x[110],y[110],ys[110],cd[110];
    bool Map[110][110];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d%d%d%d",&a[i].lx,&a[i].rx,&a[i].ly,&a[i].ry);
        for(int i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]);
    	memset(cd,0,sizeof(cd));
    	memset(Map,0,sizeof(Map));
        for(int i=1;i<=n;i++)//i表示纸片A、B… 
            for(int j=1;j<=n;j++)//j表示数字1-n 
                if(a[i].lx<=x[j]&&x[j]<=a[i].rx&&a[i].ly<=y[j]&&y[j]<=a[i].ry)
    				Map[i][j]=1,cd[i]++;
        for(int i=1;i<=n;i++)if(cd[i]==0){printf("None\n");return 0;}
        for(int t=1;t<=n;t++)
        {
            int x=0;
            for(int i=1;i<=n;i++)if(cd[i]==1){x=i;break;} //找到只有一个出度的字母 
            if(x==0){printf("None\n");return 0;}
            int y=0;
            for(int j=1;j<=n;j++)if(Map[x][j]){y=j;break;}//找到x对应的数字y 
            ys[x]=y;//字母x对应数字y 
            for(int i=1;i<=n;i++)if(Map[i][y])cd[i]--,Map[i][y]=0;//所有范围包含y的纸片的出度减一 
        }
        for(int i=1;i<=n;i++)printf("%c %d\n",i+'A'-1,ys[i]);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:53:43


      #include<bits/stdc++.h>
      using namespace std;
      struct node{int lx,rx,ly,ry;}a[110];
      int x[110],y[110],ys[110],cd[110];
      bool Map[110][110];
      int main()
      {
          int n;scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%d%d%d%d",&a[i].lx,&a[i].rx,&a[i].ly,&a[i].ry);
          for(int i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]);
      	memset(cd,0,sizeof(cd));
      	memset(Map,0,sizeof(Map));
          for(int i=1;i<=n;i++)//i表示纸片A、B… 
              for(int j=1;j<=n;j++)//j表示数字1-n 
                  if(a[i].lx<=x[j]&&x[j]<=a[i].rx&&a[i].ly<=y[j]&&y[j]<=a[i].ry)
      				Map[i][j]=1,cd[i]++;
          for(int i=1;i<=n;i++)if(cd[i]==0){printf("None\n");return 0;}
          for(int t=1;t<=n;t++)
          {
              int x=0;
              for(int i=1;i<=n;i++)if(cd[i]==1){x=i;break;} //找到只有一个出度的字母 
              if(x==0){printf("None\n");return 0;}
              int y=0;
              for(int j=1;j<=n;j++)if(Map[x][j]){y=j;break;}//找到x对应的数字y 
              ys[x]=y;//字母x对应数字y 
              for(int i=1;i<=n;i++)if(Map[i][y])cd[i]--,Map[i][y]=0;//所有范围包含y的纸片的出度减一 
          }
          for(int i=1;i<=n;i++)printf("%c %d\n",i+'A'-1,ys[i]);
          return 0;
      }





      • 1

      *【拓扑(难度:4)】烦人的幻灯片

      信息

      ID
      769
      时间
      1000ms
      内存
      128MiB
      难度
      8
      标签
      递交数
      18
      已通过
      5
      上传者