zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    python易混易乱(2)
    python易混易乱(1)
    #1062 – Duplicate entry ‘1’ for key ‘PRIMARY’
    关于 flask 实现数据库迁移以后 如何根据创建的模型类添加新的表?
    Linux同步互斥(Peterson算法,生产者消费者模型)
    正则表达式(Python)
    进程间通信
    CSS常见简写规则整理
    Django Model
    Django杂记
  • 原文地址:https://www.cnblogs.com/huangxf/p/4457630.html
Copyright © 2011-2022 走看看