在乙個10000*10000的二維平面上,有n顆糖果。
lyk喜歡吃糖果!並且它給自己立了規定,一定要吃其中的至少c顆糖果!
事與願違,lyk只被允許圈出乙個正方形,它只能吃在正方形裡面的糖果。並且它需要支付正方形邊長的價錢。
lyk為了滿足自己的求食慾,它不得不花錢來圈乙個正方形,但它想花的錢盡可能少,你能幫幫它嗎?
輸入格式:
第一行兩個數c和n。
接下來n行,每行兩個數xi,yi表示糖果的座標。
輸出格式:
乙個數表示答案。
輸入樣例#1:
3 4輸出樣例#1:1 22 1
4 15 2
4樣例解釋選擇左上角在(1,1),右下角在(4,4)的正方形,邊長為4。對於30%的資料n<=10。
對於50%的資料n<=50。
對於80%的資料n<=300。
對於100%的資料n<=1000。1<=xi,yi<=10000。
1/*2view code如果邊長為x可行,邊長x+1也一定能覆蓋至少c個糖果
3假如x不可行,邊長為x-1是不可能覆蓋c個糖果的。 ——> 二分答案。
4l=1,r=10000, 判斷mid是否可行, 可行-> 答案在[l,mid] ,不可行 -> (mid,r]
5while (l<=r)
6二分完答案後,怎麼判定。
7↓↓↓↓↓↓↓↓↓↓↓
8列舉上邊在**。
9下邊的位置是固定的。
10哪些糖果被夾在這段區間中。 o(n)
1112
左邊為1的情況下,右邊是什麼
13隨著左邊向右移動,右邊也一定向右移動。
14左邊至多移動n次,右邊也至多移動n次,總共2n次。 o(n)
15*/
1617 #include18 #include19 #include20 #include21 #include22
using
namespace
std;
2324
int c,n,l,r,mid,temp[1005
];25
struct
candy
2632 }candy[1005
];33
34bool judge(int l,int r) //
上下長
3544
return
false;45
}464748
bool check(int x) //
左右長
4958}59
if(judge(l,n)) return
true; //
單獨判斷n為右邊界的時候是否可行,因為r==n時沒法在上面的for迴圈中寫
60return
false;61
}6263int
main()
6470 sort(candy+1,candy+n+1
);71 l=1,r=10000;72
while(l<=r) //
二分乙個邊長
7378 printf("
%d",l+1
);79
return0;
80 }
2016國慶清北Day2T1
pa 題目描述 漢諾塔公升級了 現在我們有n個圓盤和n個柱子,每個圓盤大小都不一樣,大的圓盤不能放在小的圓盤上面,n個柱子從左到右排成一排。每次你可以將一 個柱子上的最上面的圓盤移動到右邊或者左邊的柱子上 如果移動之後是合法的 話 現在告訴你初始時的狀態,你希望用最少的步數將第i 大的盤子移動到第i...
2017 10 7 國慶清北 D7T2 第k大區間
定義乙個長度為奇數的區間的值為其所包含的的元素的中位數。現給出n個數,求將所有長度為奇數的區間的值排序後,第k大的值為多少。輸入格式 輸入檔名為kth.in。第一行兩個數n和k 第二行,n個數。0 每個數 2 31 輸出格式 乙個數表示答案 輸入樣例 1 4 3 3 1 2 4 樣例解釋 l,r 表...
2017 10 3 國慶清北 D3T3 解迷遊戲
lyk進了一家古董店,它很想買其中的一幅畫。但它帶的錢不夠買這幅畫。幸運的是,老闆正在研究乙個問題,他表示如果lyk能幫他解出這個問題的話,就把這幅畫送給它。老闆有乙個n m的矩陣,他想找乙個和最大的子矩陣,這個子矩陣可以由四個引數x,y,x2,y2 1 x x2 n,1 y y2 m 來表示,表示...