zoukankan      html  css  js  c++  java
  • 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张幻灯片按照演讲要使用的顺序已经用数字l,2,…,n在上面编了号。因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片。
    现在我们用大写字母A,B,C,…再次把幻灯片依次编号。你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是惟一的;若是出现多种对应的情况或是某些数字编号和字母编号对应不起来,我们就称对应是无法实现的。
    输入格式】
    幻灯片的情况通过一个文本文件slides.in输入。
    文件的第1行只有一个整数n,表示有n张幻灯片,接下来的n行每行包括4个整数Xmin,Xmax,Ymin,Ymax(整数之间用空格分开)为幻灯片的坐标,这n张幻灯片按其在输入文件中出现的顺序从前到后依次编号为A,B,C,…
    再接下来的n行依次为n个数字编号的坐标x,y,显然在幻灯片之外是不会有数字的。
     
    输出格式】
    要求将程序的运行结果写入一个名为slides.out的文本文件。若是对应可以实现,输出文件应该包括n行,每一行为一个字母和一个数字,中间以一个空格隔开,并且各行以字母的升序排列,注意输出的字母要大写并且顶格;反之,若是对应无法实现,在文件的第1行顶格输出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
    输 出
    A 4
    B 1
    C 2
    D 3
     
    数据很水。。貌似随便写写就能过
     1 #include <cstring>
     2 #include <cstdio>
     3 
     4 int n,x,y,ans;
     5 struct Node
     6 {
     7     int xmax,xmin,ymax,ymin;
     8 }zm[27];
     9 
    10 bool vis[27];
    11 int rd[27],match[27],map[27][27];
    12 bool find(int u)
    13 {
    14     for(int v=1;v<=n;v++)
    15         if(map[u][v]&&!vis[v])
    16         {
    17             vis[v]=1;
    18             if(!match[v]||find(match[v]))
    19             {
    20                 match[v]=u;
    21                 return true;
    22             }
    23         }
    24     return false;
    25 }
    26 
    27 inline void read(int &x)
    28 {
    29     x=0; register char ch=getchar();
    30     for(;ch>'9'||ch<'0';) ch=getchar();
    31     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    32 }
    33 
    34 int AC()
    35 {
    36     freopen("slides.in","r",stdin);
    37     freopen("slides.out","w",stdout);
    38     
    39     read(n);
    40     for(int i=1;i<=n;i++)
    41         read(zm[i].xmin),read(zm[i].xmax),read(zm[i].ymin),read(zm[i].ymax);
    42     for(int i=1;i<=n;i++)
    43     {
    44         read(x),read(y);
    45         for(int j=1;j<=n;j++)
    46             if(zm[j].xmax>=x&&zm[j].xmin<=x&&zm[j].ymax>=y&&zm[j].ymin<=y)
    47                 map[i][j]=1,rd[j]++;
    48     }
    49     for(int i=1;i<=n;i++)
    50     {
    51         if(find(i)) ans++;
    52         memset(vis,0,sizeof(vis));
    53     }
    54     bool flag=0;
    55     for(int i=1;i<=n;i++)
    56         if(rd[i]<2) flag=1;
    57     if(ans!=n||!flag) printf("None");
    58     else
    59     {
    60         for(int i=1;i<=n;i++)
    61         {
    62             printf("%c ",'A'+i-1);
    63             printf("%d
    ",match[i]);
    64         }
    65     }
    66     return 0;
    67 }
    68 
    69 int Hope=AC();
    70 int main(){;}
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    计算数组的逆序对个数
    处理类型(typedef,uisng,auto,decltype)
    constexpr与常量表达式(c++11标准)
    const的限定
    void*类型的指针
    linux终端拖动鼠标总是产生ctrl+c
    Linux hrtimer分析(2)
    Linux hrtimer分析(一)
    Alarm(硬件时钟) init
    第十一章 Android 内核驱动——Alarm
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7467446.html
Copyright © 2011-2022 走看看