UVa 11134 Fabled Rooks(貪心+優先佇列)
題目大意:
在一個棋盤上,放置N個國際象棋的城堡,每個城堡給出可以放置的範圍,要求這些城堡不能相互攻擊到,求這些城堡的擺放方案。
解題思路:
這題非常關鍵的一點就是橫縱座標可以分開獨立考慮。對於每一個方向,我們維護一個下限小(其次上線小)的區間優先出堆的堆,以及當前要填充的座標。每次去堆頂區間。如果上限小於要填充座標說明無法填充。如果下限小於當前要填充座標,更新下限,否則取下限和要填充座標進行填充,並且更新要填充座標。就這樣從小到大不斷填充,直至所有區間填充完畢。
AC程式碼:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int maxn=5000+3; struct Node { int l,r,id;//下限、上限、編號 bool operator<(const Node &other)const//下限小的優先出堆,其次考慮上限小的 { if(l!=other.l) return l>other.l; else return r>other.r; } }node[2][maxn]; int N,ans[2][maxn]; bool solve(int x) { priority_queue<Node> que; for(int i=0;i<N;++i) que.push(node[x][i]); int now=0; while(!que.empty()) { Node tmp=que.top(); que.pop(); if(tmp.r<now)//區域內所有座標都已使用,無法放置 return false; if(tmp.l<now)//更新下限 { tmp.l=now; que.push(tmp); } else//放置棋子 { int put=max(now,tmp.l); ans[x][tmp.id]=put; now=put+1; } } return true; } int main() { while(~scanf("%d",&N)&&N) { for(int i=0;i<N;++i) { scanf("%d%d%d%d",&node[0][i].l,&node[1][i].l,&node[0][i].r,&node[1][i].r); node[0][i].id=i; node[1][i].id=i; } if(solve(0)&&solve(1))//橫縱座標都有解 for(int i=0;i<N;++i) printf("%d %d\n",ans[0][i],ans[1][i]); else puts("IMPOSSIBLE"); } return 0; }
相關推薦
UVa 11134 Fabled Rooks(貪心+優先佇列)
題目連結 題目大意: 在一個棋盤上,放置N個國際象棋的城堡,每個城堡給出可以放置的範圍,要求這些城堡不能相互攻擊到,求這些城堡的擺放方案。 解題思路: 這題非常關鍵的一點就是橫縱座標可以分開獨立考慮。對於每一個方向,我們維護一個下限小(其次上線小)的區間
UVA 11134 Fabled Rooks(貪心的妙用+memset誤用警示)
\n UC 錯誤 百度 函數傳參 用法 min 開始 != 題目鏈接: https://cn.vjudge.net/problem/UVA-11134 1 /* 2 問題 輸入棋盤的規模和車的數量n(1=<n<=5000),接著輸入n輛車的所能在的矩陣
(白書訓練計劃)UVa 11134 Fabled Rooks(貪心)
這題因為行與列是無關的,互無影響的。所以可以將行或列分開來計算。這就相當於轉化成了在期間[1,n]內選擇n個不同的整數,使得第i個整數在閉區間[Li,Ri]內。這就轉換成了一個貪心問題了。但是注意不能先按照左端點排序,再按右端點排序,然後儘量往左邊放,比如,(1,1),(
UVA 11134 Fabled Rooks 【貪心+問題分解】
題意: 在一個n*n的棋盤中放置 n個棋子,每個棋子有固定的放置範圍,在滿足放置範圍的情況下,放置的棋子橫向和縱向不能有第二個棋子;輸出棋子的放置位置或者 impossible; 思路: 解這題的關鍵就是問題的分解,如果能想到問題的分解方法的話,就比較容易做了;因為
Uva 11134 Fabled Rooks(平面區間選點)
由於它是平面選點,可以將它確定矩形的對角座標x1,y1,x2,y2,,拆成x軸座標x1,y1 和y軸座標x2,y2; 然後分別對x軸和y軸區間選點,只要兩個都可以選完,那就說明在它確定的平面上也是可以選出的。需注意輸出時還要還原順序輸出。 import java.util.
Codeforces Round #390 (Div. 2)(A,B,C(記憶化搜尋),D(貪心,優先佇列))
/* Codeforces Round #390 (Div. 2) 時間: 2017/02/16 A. Lesha and array splitting 題意:將集合分成幾個小集合,要求小集合的和不為0. 題解:遍歷過去,一直到不滿足集合並數字非0前生成一個集合 */ #
Expedition POJ 2431 (貪心與優先佇列)
題面: A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to
UVa 11134 - Fabled Rooks 優先隊列,貪心 難度: 0
所在 n皇後 時間 com pro 比較 php 現在 online 題目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am
11134-Fabled Rooks【貪心 + 優先佇列 + 思想轉化】
這題主要學習了一下貪心的方法,和優先佇列priority_queue的使用 貪心策略就是 每次 左邊界 小的 並且 右邊界 小的出佇列,其次需要根據位置不斷更新左邊邊界值 #include<cstdio> #include<cstring> #inc
UVa 11134 Fabled Rooks 算法分析
端點 處理 我們 example lob problem 經典 一個點 本質 難度:β 用時:0 題目:?? 代碼:?? 這是一道區間貪心題。 題目都不用花心思建模了。要求相當明確。就是要把 n 個點放在 一個 n x n 的網格裏,要求點與點不能共行或共列,每個點
UVA—11134 Fabled Rooks 傳說中的車
UVA-11134 Fabled Rooks 傳說中的車 剛開始時想直接用回溯法過,試了兩種回溯方法都超時了。 後來用貪心法寫了一遍,老是WA,卡了差不多兩小時發現自己輸出中的IMPOSSIBLE寫成IMPOSSBILE了,改了之後就AC了。難受。 總的來說還是要注意細節。 對於題目
POJ 3190 Stall Reservations-奶牛分欄(區間貪心,優先佇列)
題目大意:每一隻奶牛要求在時間區間[A,B]內獨享一個牛欄。問最少需要多少個牛欄。 貪心策略是優先滿足A最小的奶牛,維持一個牛欄B最小堆,將新來的奶牛塞進B最小的牛欄裡。 <p><span style="color: rgb(51, 51, 51);
二叉樹(堆和優先佇列)
堆是一種特殊的二叉樹。 最小值堆:最小值堆的特性。 對於堆的任意非葉節點K,K的值總是小於或者等於左右子節點。 K <= 左節點;K <= 又節點; 堆例項: 堆實際上是一個完全二叉樹(若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1)
201803-4 棋局評估(動態規劃+優先佇列)
試題編號: 201803-4 試題名稱: 棋局評估 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述 Alice和Bob正在玩井字棋遊戲。 井字棋遊戲的規則很簡單:兩人輪流往3
Touch The Sky (氣球抉擇 優先佇列)
題意: 你的飛艇有n個一次性氣球,開始你在海拔0m位置,每一個氣球有一個L和D,你在小於等於L的位置才可以使用這個氣球,使你的海拔上升D。問我最多可以使用幾個氣球 解析: 設A=L+D,對於兩個氣球x和y,他們的A為Ax和Ay。顯然當Ax<Ay時,我會優
CCF-CSP-2017-3-4 地鐵修建(結構體優先佇列)
題目:問題描述 A市有n個交通樞紐,其中1號和n號非常重要,為了加強運輸能力,A市決定在1號到n號樞紐間修建一條地鐵。 地鐵由很多段隧道組成,每段隧道連線兩個交通樞紐。經過勘探,有m段隧道作為候選,
中山紀念中學20170310洗衣服(貪心,優先隊列升序【pair】)
long spa tor i++ 再次 記錄 當前 優先 mil #include<bits/stdc++.h>using namespace std;typedef pair<long long,int>clot;priority_queue<
洛谷4404 [JSOI2010]快取交換(貪心)(優先佇列)
題目 在計算機中,CPU只能和快取記憶體Cache直接交換資料。當所需的記憶體單元不在Cache中時,則需要從主存裡把資料調入Cache。此時,如果Cache容量已滿,則必須先從中刪除一個。 例如,當前Cache容量為3,且已經有編號為10和20的主存單元。 此時,CPU訪問編號為10的主存
Uva 10382 Watering Grass(貪心區間覆蓋+)
n sprinklers are installed in a horizontal strip of grass l meters long andw meters wide. Each sprinkler is installed at the horizontal
D. Fedor and coupons(貪心+優先佇列)
Note In the first example if we take the first two coupons then all the products with ids in range [40, 70] can be bought with both coupons. There are