【模拟】糊涂的教授

在这里插入图片描述

在这里插入图片描述


思路:

这题模拟就好了
假设有三张幻灯片
然后大写字母是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;
} 

猜你喜欢

转载自blog.csdn.net/hunkwu/article/details/108182983