超详细解释!我都被我自己惊呆了!

(这个题目意思我缓冲了很久!一定要读懂题!否则做不出来)

题目不懂就多读呀~

题目描述

李教授于今天下午做一个非常重要的演讲。不幸的是他不是一个非常爱整洁的人,他把自己做演讲要用的幻灯片随便堆放在一起。因此,演讲之前他不得不去整理这些幻灯片。做为一个讲求效率的学者,他希望尽可能简单地完成它。情况是这样,教授这次演讲一共要用n张幻灯片(n<=26),这n张幻灯片按照演讲要使用的顺序已经用数字1,2,…,n在上面编上了号。因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片。

现在我们用大写字母A,B,C,。。。再次把幻灯片依次编上号,如样例所示,我们可以很快发现编号为A的幻灯片是第4张,把它抽出来后我们又可以确定编号为C的幻灯片是第2张,。。。

你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是唯一的;若是出现多种对应的情况或是某些数字编号和字母对应不起来,我们就称对应是无法实现的。

输入格式

第一行只有一个数n,表示有n张幻灯片,接下来的n行第行包括4个整数Xmin,Xmax,Ymin,Ymax(整数之间用空格分开),为幻灯片的坐标(该区域为幻灯片),这n张幻灯片按其在输入文件中出现的顺序从前到后依次编号为A,B,C,。。。再接下来的n行依次为n个数字编号的坐标X,Y,显然在幻灯片之外是不会有数字的。

(其实是键盘输入了啦)

输出格式

若是对应可以实现,你的输出应该包括n行,每一行为一个字母和一个数字,中间以一个空格隔开,并且各行以字母的升序排列,注意输出的字母要大写并且顶格;反之,若是对应无法实现,在文件的第一行顶格输出None即可。行首行末无多余空格。

(其实是屏幕输出了啦。。。)

样例输入

4
6 22 10 20
4 18 6 16
8 20 2 18
10 24 4 8
9 15
19 17
11 7
21 11

样例输出

A4
B1
C2
D3

代码:

 #include<iostream>
#include<cstdio>
#include<cstring> using namespace std; int n,anse;
int vis[][];
int head,QwQ[]; struct Q_zb{
Q_zb ()//进行初始化
{
top=;
ans=;
}
int xmin,xmax,ymin,ymax;
int top,ans;//统计答案
void add()
{
top++;
}
void shanchu()
{
top--;
}
}QAQ[]; void Q_in() //进行输入
{
int x,y; //横纵坐标
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d%d%d",&QAQ[i].xmin,&QAQ[i].xmax,&QAQ[i].ymin,&QAQ[i].ymax);
}
for(int i=;i<=n;i++) //第几张数字幻灯片
{
scanf("%d%d",&x,&y);
for(int k=;k<=n;k++) //第几张字母幻灯片
{
if(QAQ[k].xmin<=x&&QAQ[k].xmax>=x&&QAQ[k].ymin<=y&&QAQ[k].ymax>=y)
{
QAQ[k].add();
vis[k][i]=;//k表示第'k+64'张幻灯片 (字母幻灯片)
} //表示'k+64'张幻灯片可能是第几张数字幻灯片,进行标记
}
}
} bool Q_topos() //判断是否能够找到对应关系
{
for(int i=;i<=n;i++) //字母幻灯片
{
if(QAQ[i].top==) return ; //如果没有数字幻灯片与其对应,则该题无法做
if(QAQ[i].top==)
{
QwQ[++head]=i; //将'i+64'字母幻灯片入栈
}
}
if(head==) return ; //如果字母幻灯片中没有一一对应的幻灯片,说明形成了环,则该题无法做
do
{
int s=QwQ[head];//字母幻灯片
head--; //弹出
for(int k=;k<=n;k++)
{
if(vis[s][k])
{
anse=QAQ[s].ans=k;//记录答案,便于输出
}
}
for(int x=;x<=n;x++)
{
if(vis[x][anse])//如果'x+64'张幻灯片与
{
vis[x][anse]=;//消除标记
QAQ[x].shanchu();//个数--
if(QAQ[x].top==) QwQ[++head]=x;//若再发现一一对应的幻灯片,入栈
}
}
}while(head>);
for(int i=;i<=n;i++)//判断是否有结果,有则进行输出
if(!QAQ[i].ans) return ;
return ;
} void Q_print()
{
for(int i=;i<=n;i++)
{
cout<<char(i+);
//cout<<" ";
cout<<QAQ[i].ans<<endl;
}
} int main()
{
Q_in();
if(!Q_topos()) printf("None");
else Q_print();
return ;
}

还有一种暴力代码:

(ps:偷得代码啦)

上面如果看不懂的话,就试试暴力吧~(不好意思注释懒得打了……)

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int n,num,xx,yy;
}aa[];
int a[][];
struct rrrr{
int numm;bool aaa[];
}rudu[];
int cmp(const node & ac,const node & bc)
{
if(ac.num<bc.num)return ;
else return ;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
for(int j=;j<=;j++)
scanf("%d",&a[i][j]);
}
int x,y;
int ans[];
int vis[];
for(int i=;i<=n;i++)
{
scanf("%d%d",&x,&y);
aa[i].n=i;
aa[i].xx=x;
aa[i].yy=y;
for(int j=;j<=n;j++)
if(x>=a[j][]&&x<=a[j][]&&y>=a[j][]&&y<=a[j][])
{
aa[i].num++;
rudu[j].numm++;
rudu[j].aaa[i]=;
}
}
int tot=;
int flagg=;
for(int i=;i<=n;i++)
{
if(rudu[i].numm==)
{
flagg++;
}
}
if(flagg!=)
{
printf("None");
return ;
}
sort(aa+,aa+n+,cmp);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(aa[i].xx>=a[j][]&&aa[i].xx<=a[j][]&&aa[i].yy>=a[j][]&&aa[i].yy<=a[j][]&&!vis[j])
{
vis[j]=;
ans[j]=aa[i].n;
tot++;
break;
}
}
for(int q=;q<=n;q++)
if(rudu[q].aaa[aa[i].n]==)
{
rudu[q].aaa[aa[i].n]=;
rudu[q].numm--;
}
}
int flag=;
for(int i=;i<=n;i++)
{
if(rudu[i].numm!=)
{
flag=;
break;
}
}
if(tot!=n||flag)
{
printf("None");
return ;
}
else
for(int i=;i<=n;i++)
{
printf("%c",i+);
printf("%d",ans[i]);
cout<<endl;
}
return ;
}

PID221 / 烦人的幻灯片☆ x的更多相关文章

  1. VIJOS PID221 / 烦人的幻灯片

     暴力出奇迹,学长诚不欺我. PID221 / 烦人的幻灯片 2017-04-14 19:47:08 运行耗时:30 ms 运行内存:12292 KB 查看最后一次评测记录 题目描述 李教授于今天下午 ...

  2. SID1190471 / 烦人的幻灯片 暴力出奇迹 !!!!!!!!!!!!!!!!!!

    PID221 / 烦人的幻灯片 ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态         查看最后一次评测记录 质量还不能统计出来哦~ 题目评价 质量 无 ★★★★★ ★★★★☆ ★ ...

  3. sdibt 1244 烦人的幻灯片

    在这个OJ站还没号,暂时没提交,只是过了样例 真不愧是烦人的幻灯片,烦了我一小时 ---更新:OJ测试完毕,AC 烦人的幻灯片问题 Time Limit: 1 Sec  Memory Limit: 6 ...

  4. 【拓扑排序】烦人的幻灯片(slides)

    1395:烦人的幻灯片(slides) 时间限制: 1000 ms         内存限制: 65536 KB提交数: 753     通过数: 416 [题目描述] 李教授将于今天下午作一次非常重 ...

  5. 病毒&烦人的幻灯片

    <病毒>传送门 <烦人的幻灯片>传送门 病毒 描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改 ...

  6. UVA663 Sorting Slides(烦人的幻灯片)

    UVA663 Sorting Slides(烦人的幻灯片) 第一次做到这么玄学的题,在<信息学奥赛一本通>拓扑排序一章找到这个习题(却发现标程都是错的),结果用二分图匹配做了出来 蒟蒻感觉 ...

  7. COGS——T 438. 烦人的幻灯片

    http://www.cogs.pro/cogs/problem/problem.php?pid=438 ★☆   输入文件:slides.in   输出文件:slides.out   简单对比时间限 ...

  8. iOS 界面 之 EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具

    http://blog.csdn.net/fatherhui iOS开发,EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具 EALa ...

  9. Jmeter之解决烦人的中文乱码问题

    Jmeter是一款国外开源工具,所以就跟LR一样,对中文的支持不是很好,经常会有同学录制脚本后回放或者是发送HTTP请求,看到响应报文里面有乱码! 那如何才能解决这个问题呢?我们分2个情况来分析: 一 ...

随机推荐

  1. Dialupass v3.20 汉化绿色版 显示查看拨号上网密码

    Dialupass 显示查看拨号上网密码 拨号上网的密码不小心丢了怎么办?这个工具可以帮你!在紧要关头,它会让你体验到它的奇效!有备无患,快收藏这个小东东吧. 这是一款拯救忘记了拨号网络密码的使用者的 ...

  2. mysql——触发器——示例

    数据准备: ), d_id ), name ), age ), sex ), homeadd ) ); ,,,'nan','beijing'); ,,,'nv','hunan'); ,,,'nan', ...

  3. oracle truncate表 恢复操作

    truncate恢复表 1.创建测试用表 conn elan/elan create table haha as select * from dba_users; 2.查询表数据 ) from hah ...

  4. maven 报错 -source 1.5 中不支持 diamond 运算符

    maven 执行install 报-source 1.5 中不支持 diamond 运算符 解决办法, 指定编译版本 <build> <plugins> <plugin& ...

  5. WorkStation Linux 客户端 虚拟机的使用过程

    1. 安装Workstation 版本选择 12.5 以上的版本 2. 安装完成之后 选择 打开虚拟机->选择 ovf文件 选择 ovf 文件 选择读入即可 3. 设置虚拟机的选项: 3.1  ...

  6. Objective-C中的自动释放池

    自动释放池块@autoreleasepool 自动释放池块在MRC和ARC下都可以使用.在MARC下,为了将自动释放池块内部的变量放入自动释放池,需要手动调用autorelease方法:在ARC下,只 ...

  7. vmware中的虚拟linux配置多块网卡

    在使用vm上运行多个linux系统,来模拟LVS负载均衡实验中.需要在lvs服务器中设置两块网卡,发现可以在vm给虚拟机添加任意多个网卡. 方法: 不要启动Linux,在上面的菜单项中选择: “VM— ...

  8. 使用RSA算法对接口参数签名及验签

    在不同的服务器或系统之间通过API接口进行交互时,两个系统之间必须进行身份的验证,以满足安全上的防抵赖和防篡改. 通常情况下为了达到以上所描述的目的,我们首先会想到使用非对称加密算法对传输的数据进行签 ...

  9. node.js使用express模块创建web服务器应用

    1.安装express模块 在命令行输入 npm install body-parser --save npm install express --save 2.创建app.js文件 /*应用程序入口 ...

  10. Action获取请求参数的3中方式

    方式一:Action本身作为Model对象,通过属性注入(Setter)方法讲参数数据封装到Action中 具体为:在Action中,提供和参数名相同的几个属性,并为其提供set方法,那么,该参数会被 ...