zoukankan      html  css  js  c++  java
  • UVa 11134 传说中的车

    https://vjudge.net/problem/UVA-11134

    题意:在n*n的棋盘上放n个车,使得任意两个车不相互攻击,且第i个车在一个给定的矩形Ri之内。用4个整数xli,yli,xri,yri来描述第i个矩形。

    思路:行和列是不影响的,也就是说第i个棋子放在第几行不会影响它的列数。这样的话我们就可以分别处理行和列。由于棋子被给定了范围,这样的话我们可以用贪心法来解决,按照ri右坐标从小到大排序,然后从左坐标开始选出最小的且未被占据的坐标。

     1 #include<iostream>  
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 const int maxn = 100000;
     7 
     8 int n;
     9 int ok;
    10 
    11 int vis_row[maxn];
    12 int vis_col[maxn];
    13 
    14 int ans_row[maxn];
    15 int ans_col[maxn];
    16 
    17 struct node
    18 {
    19     int l, r;
    20     int id;
    21 }x[maxn],y[maxn];
    22 
    23 bool cmp(node a, node b)
    24 {
    25     return a.r < b.r || (a.r == b.r && a.l < b.l);
    26 }
    27 
    28 void solve()
    29 {
    30     memset(vis_row, 0, sizeof(vis_row));
    31     memset(vis_col, 0, sizeof(vis_col));
    32     //处理行
    33     for (int i = 0; i < n; i++)
    34     {
    35         ok = 0;
    36         int num = x[i].id;
    37         for (int j = x[i].l; j <= x[i].r; j++)
    38         {
    39             if (!vis_row[j])
    40             {
    41                 ans_row[num] = j;
    42                 vis_row[j] = 1;
    43                 ok = 1;
    44                 break;
    45             }
    46         }
    47         if (!ok)  return;
    48     }
    49 
    50     //处理列
    51     for (int i = 0; i < n; i++)
    52     {
    53         ok = 0;
    54         int num = y[i].id;
    55         for (int j = y[i].l; j <= y[i].r; j++)
    56         {
    57             if (!vis_col[j])
    58             {
    59                 ans_col[num] = j;
    60                 vis_col[j] = 1;
    61                 ok = 1;
    62                 break;
    63             }
    64         }
    65         if (!ok)  return;
    66     }
    67 }
    68 
    69 int main()
    70 {72     while (cin >> n && n)
    73     {
    74         for (int i = 0; i < n; i++)
    75         {
    76             cin >> x[i].l >> y[i].l >> x[i].r >> y[i].r;
    77             x[i].id = i;
    78             y[i].id = i;
    79         }
    80         sort(x, x + n, cmp);
    81         sort(y, y + n, cmp);
    82         solve();
    83         if (ok)
    84         {
    85             for (int i = 0; i < n; i++)
    86             {
    87                 cout << ans_row[i] << " " << ans_col[i] << endl;
    88             }
    89         }
    90         else cout << "IMPOSSIBLE" << endl;
    91     }
    92 
    93     return 0;
    94 }
  • 相关阅读:
    Sublime Text 试玩日记
    Makefile 学习
    小书匠使用手册
    较完整的解决Linux zip 压缩包中文我乱码问题
    彻底解决Android模拟器中文短信乱码问题
    博客变更
    关于如何学习一个框架的经验总结
    [JavaScript] this、call和apply详解
    类与类之间关系,用C#和JavaScript体现
    [Node.js] require背后的故事
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6353718.html
Copyright © 2011-2022 走看看