2 条题解
-
0
#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
#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
信息
- ID
- 769
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 18
- 已通过
- 5
- 上传者