寵物收養場 vector, 加二分)

2021-10-10 09:26:21 字數 2554 閱讀 6967

凡凡開了一間寵物收養場。收養場提供兩種服務:收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,凡凡根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a(a是乙個正整數,a<2^31),而他也給每個處在收養場的寵物乙個特點值。這樣他就能夠很方便的處理整個領養寵物的過程了,寵物收養場總是會有兩種情況發生:被遺棄的寵物過多或者是想要收養寵物的人太多,而寵物太少。

被遺棄的寵物過多時,假若到來乙個領養者,這個領養者希望領養的寵物的特點值為a,那麼它將會領養乙隻目前未被領養的寵物中特點值最接近a的乙隻寵物。(任何兩隻寵物的特點值都不可能是相同的,任何兩個領養者的希望領養寵物的特點值也不可能是一樣的)如果有兩隻滿足要求的寵物,即存在兩隻寵物他們的特點值分別為a-b和a+b,那麼領養者將會領養特點值為a-b的那只寵物。

收養寵物的人過多,假若到來乙隻被收養的寵物,那麼哪個領養者能夠領養它呢?能夠領養它的領養者,是那個希望被領養寵物的特點值最接近該寵物特點值的領養者,如果該寵物的特點值為a,存在兩個領養者他們希望領養寵物的特點值分別為a-b和a+b,那麼特點值為a-b的那個領養者將成功領養該寵物。

乙個領養者領養了乙個特點值為a的寵物,而它本身希望領養的寵物的特點值為b,那麼這個領養者的不滿意程度為abs(a-b)。

你得到了一年當中,領養者和被收養寵物到來收養所的情況,請你計算所有收養了寵物的領養者的不滿意程度的總和。這一年初始時,收養所裡面既沒有寵物,也沒有領養者。

輸入格式:

第一行為乙個正整數n,n<=80000,表示一年當中來到收養場的寵物和領養者的總數。接下來的n行,按到來時間的先後順序描述了一年當中來到收養場的寵物和領養者的情況。每行有兩個正整數a, b,其中a=0表示寵物,a=1表示領養者,b表示寵物的特點值或是領養者希望領養寵物的特點值。(同一時間呆在收養所中的,要麼全是寵物等領養者,要麼全是領養者要寵物,這些寵物和領養者的個數不會超過10000個)

輸出格式:

僅有乙個正整數,表示一年當中所有收養了寵物的領養者的不滿意程度的總和mod 1000000以後的結果。

輸入樣例:

在這裡給出一組輸入。例如:

5

0 20 4

1 31 2

1 5

輸出樣例:

在這裡給出相應的輸出。例如:

注:abs(3-2) + abs(2-4)=3, 最後乙個領養者沒有寵物可以領養。

思路每次需要查詢和x最近的元素, 實用vector二分插入排序, 和二分查詢即可

#include

using

namespace std;

const

int n =

1e5;

vector<

int> persons, cat;

const

int mod =

1e6;

intmain()

else

else

if(num1 == cat.

end())

ans +

=abs

(*num1 - x)

; ans %

= mod;

cat.

erase

(num1);}

}else

else

else

if(num1 == persons.

end())

ans +

=abs

(*num1 - x)

; ans %

= mod;

persons.

erase

(num1);}

}}cout << ans << endl;

return0;

}

set也可以完成這種操作而且,set內部的元素本身就有序,此處高效操作在於先插入了乙個inf和-inf,

keypoint 迭代器不能使用x - 1, x + 1這種形式,而應該是++ x, – x;

#include

#include

#include

#include

#include

using

namespace std;

const

int inf=

1e9;

const

int mod=

1000000

;set<

int>st;

int ans;

void

query

(int x)

else

ans%

=mod;

}int

main()

else

if(a==op) st.

insert

(b);

else

query

(b);

}printf

("%d"

,ans)

;return0;

}

BZOJ 1208 寵物收養所 set 二分

題目大意 最近,阿q開了一間寵物收養所。收養所提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,阿q根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a a是乙個正整數,a 2 31 而他也給每個處在收養所的寵物乙個特點...

神奇的操作 vector 二分

有q次操作,分兩類 1 x 向集合 可能會有相同元素 裡面插入元素x。2 y 查詢集合裡面第y大的元素。第一行輸入乙個整數t,代表有t組測試資料 t 10 每組資料第一行輸出乙個整數q,代表操作次數。保證 1 q 100000,且所有元素均在int範圍內。對出現的第二個操作輸出乙個整數,代表結果,如...

牛客 msc的寵物 二分 樹形dp

題目鏈結 自己假自己,怎麼寫都只能過一半的測試點,學了別人的題解。題目描述 給定一棵樹,每個結點有乙個權值,求 k 1 個連通塊中最值之差的最小值是多少。思路 二分答案很顯然,主要是用樹形dp計算最少需要的次數。dp u i 結點 u 的值 a u 在範圍為 a i,a i mid 中,且滿足其子樹...