思路:
这题模拟就好了
假设有三张幻灯片
然后大写字母是ABC
编号是
1 2在A中
2 3在B中
3在C中
C可以确定对应3
所以B只剩2
则A对应1
C o d e Code Code:
#include<cstdio>
#include<iostream>
using namespace std;
int sum, maxn[1000], answer[1000], Xmin[1000], Xmax[1000], Ymin[1000], Ymax[1000],n,x,y, f[1000][1000];
bool check;
int main()
{
freopen ("jiaoshou.in","r",stdin);
freopen ("jiaoshou.out","w",stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d%d%d%d", &Xmin[i], &Xmax[i], &Ymin[i], &Ymax[i]);
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&x,&y);
for(int j = 1; j <= n; j++)
if(x >= Xmin[j] && y >= Ymin[j] && x <= Xmax[j] && y <= Ymax[j])//边界
f[i][++maxn[i]] = j;//记录
}
sum = n;
while(sum)
{
for(int i = 1; i <= n; i++)
{
if(maxn[i] == 1)
{
check = true;//标记
answer['A' + f[i][1]] = i;//转换
for(int j = 1; j <= n; j++)
for(int k = 1; k <= maxn[j]; k++)
if(f[j][k] == f[i][1] && j != i)
{
swap(f[j][k],f[j][maxn[j]]);
f[j][maxn[j]]=0;
maxn[j]--;
}
sum--; f[i][1] = 1; maxn[i]--;
}
}
if(check)check = false;
else {
printf("None");return 0;}//输出
}
for(int i = 1; i <= n; i++)
{
printf("%c %d",64 + i, answer['A' + i]);
printf("\n");
}
return 0;
}