OpenJudge 2704 尋找平面上的極大點

2021-07-22 16:21:58 字數 1337 閱讀 1020

【問題描述】

在乙個平面上,如果有兩個點(x,y),(a,b),如果說(x,y)支配了(a,b),這是指x>=a,y>=b;用圖形來看就是(a,b)坐落在以(x,y)為右上角的乙個無限的區域內。

給定n個點的集合,一定存在若干個點,它們不會被集合中的任何一點所支配,這些點叫做極大值點。請程式設計找出所有的極大點,按照x座標由小到大,輸出極大點的座標。

【輸入格式】

輸入包括兩行,第一行是正整數n,表示是點數,第二行包含n個點的座標,座標值都是整數,座標範圍從0到100,輸入資料中不存在座標相同的點。

【輸出格式】

按x軸座標最小到大的順序輸出所有極大點。輸出格式為:(x1,y1),(x2,y2),…(xk,yk),按x由小到大,x相同則按y由小到達輸出。注意:輸出的每個點之間有」,」分隔,最後乙個點之後沒有」,」,少輸出和多輸出都會被判。

【輸入樣例】

5 1 2

2 2

3 1

2 3

1 4【輸出樣例】

(1,4),(2,3),(3,1)

【樣例解釋】

【資料範圍】

80%的資料滿足:n<=6000

100%的資料滿足:n<=100000

若是用暴力查詢,只能通過80%的資料。要想ac,則需要優化。可以考慮把x排序再查詢,這時就有很多種優化選擇。一種做法是dp查詢y值的下降子串行,為子串行開頭的元素所屬點一定是極大點。更簡單的做法就是直接從x排序後的最後乙個元素向前找y的值,如果當前y的值大於之前找到的y值,那麼當前這個點一定是極大點。時間複雜度為n*log2n。

#include

#include

#include

#include

using

namespace

std;

const

int maxn=100002;

int n;

struct data

;data a[maxn];

vector

g;bool cmp(data a,data b)

return t;

}int main()

sort(a+1,a+n+1,cmp);

int max=-1,p=0,q=0;

for(int i=n;i>=1;i--));}

}for(int i=g.size()-1;i>=0;i--)

printf(",");

}return

0;}

openjudge 數字統計

總時間限制 1000ms 記憶體限制 100000kb 描述輸入n個整數,統計每個數出現的次數.輸入 第一行是乙個整數n 1 n 1000 接下來n行每行乙個整數.輸出 第一行輸出總共有多少個不同的整數.接下來每行輸出乙個整數及這個整數出現的次數,用空格分隔.輸出的整數的順序與它們在輸入中第一次出現...

Openjudge 括號匹配

這個用了普通的迴圈,資料量不是很大的話效率還是不錯的,如果資料比較大的話,換別的方法可能效率會高一點。思路很簡單 以字串中是否還存在沒有匹配過的 作為這個字串已經處理完畢的標誌。1,讀入字串,並進行處理,把所有不是 和 的字元都轉換成空格。2,從開始掃瞄字串,如果掃瞄到 記錄 的位置,直到掃瞄到 3...

openjudge 移動路線

描述 桌子上有乙個m行n列的方格矩陣,將每個方格用座標表示,行座標從下到上依次遞增,列座標從左至右依次遞增,左下角方格的座標為 1,1 則右上角方格的座標為 m,n 小明是個調皮的孩子,一天他捉來乙隻螞蟻,不小心把螞蟻的右腳弄傷了,於是螞蟻只能向上或向右移動。小明把這只螞蟻放在左下角的方格中,螞蟻從...