PID221 / 烦人的幻灯片☆ x

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

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

题目不懂就多读呀~

题目描述

李教授于今天下午做一个非常重要的演讲。不幸的是他不是一个非常爱整洁的人,他把自己做演讲要用的幻灯片随便堆放在一起。因此,演讲之前他不得不去整理这些幻灯片。做为一个讲求效率的学者,他希望尽可能简单地完成它。情况是这样,教授这次演讲一共要用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

代码:

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4
  5 using namespace std;
  6
  7 int n,anse;
  8 int vis[111][111];
  9 int head,QwQ[111];
 10
 11 struct Q_zb{
 12     Q_zb ()//进行初始化
 13     {
 14         top=0;
 15         ans=0;
 16     }
 17     int xmin,xmax,ymin,ymax;
 18     int top,ans;//统计答案
 19     void add()
 20     {
 21         top++;
 22     }
 23     void shanchu()
 24     {
 25         top--;
 26     }
 27 }QAQ[27];
 28
 29 void Q_in()   //进行输入
 30 {
 31     int x,y;   //横纵坐标
 32     scanf("%d",&n);
 33     for(int i=1;i<=n;i++)
 34     {
 35         scanf("%d%d%d%d",&QAQ[i].xmin,&QAQ[i].xmax,&QAQ[i].ymin,&QAQ[i].ymax);
 36     }
 37     for(int i=1;i<=n;i++) //第几张数字幻灯片
 38     {
 39         scanf("%d%d",&x,&y);
 40         for(int k=1;k<=n;k++) //第几张字母幻灯片
 41         {
 42             if(QAQ[k].xmin<=x&&QAQ[k].xmax>=x&&QAQ[k].ymin<=y&&QAQ[k].ymax>=y)
 43             {
 44                 QAQ[k].add();
 45                 vis[k][i]=1;//k表示第‘k+64‘张幻灯片 (字母幻灯片)
 46             } //表示‘k+64‘张幻灯片可能是第几张数字幻灯片,进行标记
 47         }
 48     }
 49 }
 50
 51 bool Q_topos()   //判断是否能够找到对应关系
 52 {
 53     for(int i=1;i<=n;i++) //字母幻灯片
 54     {
 55         if(QAQ[i].top==0) return 0; //如果没有数字幻灯片与其对应,则该题无法做
 56         if(QAQ[i].top==1)
 57         {
 58             QwQ[++head]=i; //将‘i+64‘字母幻灯片入栈
 59         }
 60     }
 61     if(head==0) return 0; //如果字母幻灯片中没有一一对应的幻灯片,说明形成了环,则该题无法做
 62     do
 63     {
 64         int s=QwQ[head];//字母幻灯片
 65         head--; //弹出
 66         for(int k=1;k<=n;k++)
 67         {
 68             if(vis[s][k])
 69             {
 70                 anse=QAQ[s].ans=k;//记录答案,便于输出
 71             }
 72         }
 73         for(int x=1;x<=n;x++)
 74         {
 75             if(vis[x][anse])//如果‘x+64‘张幻灯片与
 76             {
 77                 vis[x][anse]=0;//消除标记
 78                 QAQ[x].shanchu();//个数--
 79                 if(QAQ[x].top==1) QwQ[++head]=x;//若再发现一一对应的幻灯片,入栈
 80             }
 81         }
 82     }while(head>0);
 83     for(int i=1;i<=n;i++)//判断是否有结果,有则进行输出
 84         if(!QAQ[i].ans) return 0;
 85     return 1;
 86 }
 87
 88 void Q_print()
 89 {
 90     for(int i=1;i<=n;i++)
 91     {
 92         cout<<char(i+64);
 93         //cout<<" ";
 94         cout<<QAQ[i].ans<<endl;
 95     }
 96 }
 97
 98 int main()
 99 {
100     Q_in();
101     if(!Q_topos()) printf("None");
102     else Q_print();
103     return 0;
104 }

还有一种暴力代码:

(ps:偷得代码啦)

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

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<cstring>
  4 #include<algorithm>
  5 using namespace std;
  6 struct node
  7 {
  8     int n,num,xx,yy;
  9 }aa[10001];
 10 int a[10001][5];
 11 struct rrrr{
 12     int numm;bool aaa[1001];
 13 }rudu[10001];
 14 int cmp(const node & ac,const node & bc)
 15 {
 16     if(ac.num<bc.num)return 1;
 17     else return 0;
 18 }
 19 int main()
 20 {
 21     int n;
 22     scanf("%d",&n);
 23     for(int i=1;i<=n;i++)
 24     {
 25         for(int j=1;j<=4;j++)
 26         scanf("%d",&a[i][j]);
 27     }
 28     int x,y;
 29     int ans[1001];
 30     int vis[1001];
 31     for(int i=1;i<=n;i++)
 32     {
 33         scanf("%d%d",&x,&y);
 34         aa[i].n=i;
 35         aa[i].xx=x;
 36         aa[i].yy=y;
 37         for(int j=1;j<=n;j++)
 38             if(x>=a[j][1]&&x<=a[j][2]&&y>=a[j][3]&&y<=a[j][4])
 39             {
 40                 aa[i].num++;
 41                 rudu[j].numm++;
 42                 rudu[j].aaa[i]=1;
 43             }
 44     }
 45     int tot=0;
 46     int flagg=0;
 47     for(int i=1;i<=n;i++)
 48     {
 49         if(rudu[i].numm==1)
 50         {
 51              flagg++;
 52         }
 53     }
 54     if(flagg!=1)
 55     {
 56         printf("None");
 57         return 0;
 58     }
 59     sort(aa+1,aa+n+1,cmp);
 60     for(int i=1;i<=n;i++)
 61     {
 62         for(int j=1;j<=n;j++)
 63         {
 64             if(aa[i].xx>=a[j][1]&&aa[i].xx<=a[j][2]&&aa[i].yy>=a[j][3]&&aa[i].yy<=a[j][4]&&!vis[j])
 65             {
 66             vis[j]=1;
 67             ans[j]=aa[i].n;
 68             tot++;
 69             break;
 70             }
 71         }
 72         for(int q=1;q<=n;q++)
 73         if(rudu[q].aaa[aa[i].n]==1)
 74         {
 75             rudu[q].aaa[aa[i].n]=0;
 76             rudu[q].numm--;
 77         }
 78     }
 79     int flag=0;
 80     for(int i=1;i<=n;i++)
 81     {
 82         if(rudu[i].numm!=0)
 83         {
 84          flag=1;
 85          break;
 86         }
 87     }
 88     if(tot!=n||flag)
 89     {
 90         printf("None");
 91         return 0;
 92     }
 93     else
 94     for(int i=1;i<=n;i++)
 95     {
 96         printf("%c",i+64);
 97         printf("%d",ans[i]);
 98         cout<<endl;
 99     }
100     return 0;
101 }
时间: 2024-12-29 23:42:14

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

VIJOS PID221 / 烦人的幻灯片

 暴力出奇迹,古人诚不欺我. PID221 / 烦人的幻灯片 2017-04-14 19:47:08 运行耗时:30 ms 运行内存:12292 KB 查看最后一次评测记录 题目描述 李教授于今天下午做一个非常重要的演讲.不幸的是他不是一个非常爱整洁的人,他把自己做演讲要用的幻灯片随便堆放在一起.因此,演讲之前他不得不去整理这些幻灯片.做为一个讲求效率的学者,他希望尽可能简单地完成它.情况是这样,教授这次演讲一共要用n张幻灯片(n<=26),这n张幻灯片按照演讲要使用的顺序已经用数字1,2,-,

PID221 / 烦人的幻灯片 ☆

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

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

PID221 / 烦人的幻灯片 ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态 查看最后一次评测记录 质量还不能统计出来哦~ 题目评价 质量 无 ★★★★★ ★★★★☆ ★★★☆☆ ★★☆☆☆ ★☆☆☆☆ 0% 0% 0% 0% 0% ★ ★ ★ ★ ☆ 通过人数 186 / 337 通过统计 最短耗时 0ms 最小内存 0KB 其它 题目标签 类型 其它 题目描述 李教授于今天下午做一个非常重要的演讲.不幸的是他不是一个非常爱整洁的人,他把自己做演讲要用的幻灯片随便堆放在一起.因此

4735 烦人的幻灯片 (拓扑)

4735 烦人的幻灯片 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 帅气的作者将于今天下午作一次非常重要的演讲.不幸的是他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起.因此,演讲之前他不得不去整理这些幻灯片.作为一个讲求效率的oier,他希望尽可能简单地完成它.帅气的作者这次演讲一共要用n张幻灯片(n<=26),这n张幻灯片按照演讲要使用的顺序已经用数字1~n编了号.因为幻灯片是透明的,所以我们不能一下子看

病毒&amp;烦人的幻灯片

<病毒>传送门 <烦人的幻灯片>传送门 病毒 描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档. 现在你的任务

拓扑排序——烦人的幻灯片

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

烦人的幻灯片(slides)

1395:烦人的幻灯片(slides) 时间限制: 1000 ms         内存限制: 65536 KB提交数: 753     通过数: 416 [题目描述] 李教授将于今天下午作一次非常重要的演讲.不幸的事他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起.因此,演讲之前他不得不去整理这些幻灯片.作为一个讲求效率的学者,他希望尽可能简单地完成它.教授这次演讲一共要用n张幻灯片(n≤26),这n张幻灯片按照演讲要使用的顺序已经用数字1~n编了号.因为幻灯片是透明的,所以我

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

http://www.cogs.pro/cogs/problem/problem.php?pid=438 ★☆   输入文件:slides.in   输出文件:slides.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 李教授将于今天下午作一次非常重要的演讲.不幸的是他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起.因此,演讲之前他不得不去整理这些幻灯片.做为一个讲求效率的学者,他希望尽可能简单地完成它.教授这次演讲一共要用n张幻灯片(n≤26)

烦人的幻灯片

[问题描述] 李教授将于今天下午作一次非常重要的演讲.不信的事他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起.因此,演讲之前他不得不去整理这些幻灯片.作为一个讲求效率的学者,他希望尽可能简单地完成它.教授这次演讲一共要用n张幻灯片(n<=26),这n张幻灯片按照演讲要使用的顺序已经用数字1~n编了号.因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片. 现在我们用大写字母A,B,C……再次把幻灯片依次编号.你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应