• UVA 11134 Fabled Rooks 贪心


    题目链接:UVA - 11134

    题意描述:在一个n*n(1<=n<=5000)的棋盘上放置n个车,每个车都只能在给定的一个矩形里放置,使其n个车两两不在同一行和同一列,判断并给出解决方案。

    算法分析:刚开始没有思路,后来看了别人的博客有了一点想法。我们把矩形的行和列分开解决,即n个车首先不能放置在同一行,然后判断n个车不能放置在同一列,如果都满足的话,即有正确的方法,否则就不行。那么怎样解决和判断在不在同一行并且是否可行呢,我们针对行而言,把这些行的坐标存入优先队列,首先取出最上面(行的标号较小)的,先放它,然后,再放下面的,依次往下撸就可以了。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #define inf 0x7fffffff
     9 using namespace std;
    10 const int maxn=5000+10;
    11 
    12 int n;
    13 struct node
    14 {
    15     int l,r;
    16     int id;
    17     friend bool operator < (node a,node b)
    18     {
    19         if (a.l != b.l) return a.l > b.l ;
    20         return a.r > b.r ;
    21     }
    22 }arr[maxn],arr2[maxn];
    23 int an[maxn][2];
    24 
    25 int solve(node *a,int pos)
    26 {
    27     priority_queue<node> Q;
    28     for (int i=0 ;i<n ;i++) Q.push(a[i]);
    29     int weizhi=0;
    30     while (!Q.empty())
    31     {
    32         node temp=Q.top() ;Q.pop() ;
    33         if (temp.r<weizhi) return 0;
    34 
    35         if (temp.l<weizhi)
    36         {
    37             temp.l=weizhi;
    38             Q.push(temp);
    39             continue;
    40         }
    41         int m=max(temp.l,weizhi);
    42         an[temp.id ][pos]=m;
    43         weizhi=m+1;
    44     }
    45     return 1;
    46 }
    47 
    48 int main()
    49 {
    50     while (scanf("%d",&n)!=EOF && n)
    51     {
    52         for (int i=0 ;i<n ;i++)
    53         {
    54             scanf("%d%d%d%d",&arr[i].l,&arr2[i].l,&arr[i].r,&arr2[i].r);
    55             arr[i].id=arr2[i].id=i;
    56         }
    57         if (solve(arr,0) && solve(arr2,1))
    58         {
    59             for (int i=0 ;i<n ;i++)
    60                 printf("%d %d
    ",an[i][0],an[i][1]);
    61         }
    62         else printf("IMPOSSIBLE 
    ");
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    css文本省略号
    javascript在数组的循环中删除元素
    ASP.NET MVC 微信公共平台开发之 微信接入
    ASP.NET Url重写
    通过FTP连接Azure上的网站
    UniversalApp启动页面设置
    ASP.NET页面动态添加js脚本
    使用HyperV虚拟机装系统
    使用一般处理程序HTTPHandler下载文件
    Egret Engine(白鹭引擎)介绍及windows下安装
  • 原文地址:https://www.cnblogs.com/huangxf/p/4457630.html
Copyright © 2020-2023  润新知