題意:在n*n的棋盤上放n個車,使得任意兩個車不相互攻擊,且第i個車在乙個給定的矩形ri之內。用4個整數xli,yli,xri,yri來描述第i個矩形。
思路:行和列是不影響的,也就是說第i個棋子放在第幾行不會影響它的列數。這樣的話我們就可以分別處理行和列。由於棋子被給定了範圍,這樣的話我們可以用貪心法來解決,按照ri右座標從小到大排序,然後從左座標開始選出最小的且未被佔據的座標。
1 #include2 #include3 #include4using
namespace
std;56
const
int maxn = 100000;7
8intn;9
intok;
1011
intvis_row[maxn];
12int
vis_col[maxn];
1314
intans_row[maxn];
15int
ans_col[maxn];
1617
struct
node
18x[maxn],y[maxn];
2223
bool
cmp(node a, node b)
2427
28void
solve()
2946}47
if (!ok) return;48
}4950//
處理列51
for (int i = 0; i < n; i++)
5264}65
if (!ok) return;66
}67}68
69int
main()
7080 sort(x, x +n, cmp);
81 sort(y, y +n, cmp);
82solve();
83if
(ok)
8489}90
else cout << "
impossible
"<9293
return0;
94 }
傳說中的車 UVa11134
題目鏈結 橫座標和縱座標可以分開處理,就是區間上的貪心問題,貪心策略是按右端點從小到大排序,若右端點相同則按左端點從大到小排序,然後在區間上從左向右取點。define crt secure no warnings include include include include include inc...
UVA11134 傳說中的車
橫縱座標互不影響,所以問題轉化到一維 在n個區間中每個區間選乙個數,n個數都被選一次 將區間按右端點排序,列舉區間,每個區間選最靠左的沒被選過的點 include include include includeusing namespace std const int maxn 5010 int n...
UVa11134傳說中的車
今天給大家說一下這道題,題意就不說了,主要說一下思路以及細節部分。首先,從這道題來看就是求出車的座標並且使得車之間不互相攻擊且要滿足車在規定的範圍 矩形 之中,由於紫書說這道題考察了我們問題分解的能力,所以我們從問題分解的角度來解決,對於問題分解,我們可以通過這種方法來簡化問題,從而更好的解決,這道...