[oj#39]左手右手
試題描述
有 n'>n
個人,每個人左右手上各寫著乙個整數。對於編號為 a
'>a
的人和編號為 b
'>b
的人, a
'>a
對 b'>b
的好感度等於 a
'>a
左手上寫的數字乘 b
'>b
右手上寫的數字,a
'>a
和 b'>b
的好感度差異等於 a
'>a
對 b'>b
的好感度與 b
'>b
對 a'>a
的好感度之差的絕對值。
現在,你要從這 n
'>n
個人中找出兩個人使得他們的好感度差異最大。
輸入
第一行乙個整數 n
'>n
。接下來 n
'>n
行,每行兩個整數 ai,
bi'>ai
,bi,分別表示第 i
'>i
個人左右手上寫的數字。
輸出
輸出乙個整數表示好感度差異的最大值。
輸入示例
59 -178
-249 -6
35
輸出示例
114
資料規模及約定2≤
n≤105
'>2≤n≤105
,−109≤
ai,b
i≤109
'>−109
≤ai,bi
≤109
2≤n
≤105'>−109
≤ai,
bi≤10
9'>題解
2≤
n≤105
'>−109
≤ai,
bi≤10
9'>首先我們可以發現兩個人 i, j 的好感度差異就是兩個向量 (ai, bi) 和 (aj, bj) 的叉積的絕對值。那麼要讓這個值最大,就是要選擇兩個向量使得它們圍成的三角形面積最大。
我們不妨先列舉其中乙個向量x,可以發現與它叉積絕對值最大的向量y一定在凸包上。我們做平行於向量x的直線,顯然如果向量y的終點在直線上,這條直線離原點越遠越好,所以一定是在凸包上的。
所以我們先處理出凸包,然後把所有向量按照極角排序,用旋轉卡殼的方法去做就可以 o(n) 了。
#include #include #include #include #include #include #include using namespace std;int read()
while(isdigit(c))
return x * f;
}#define maxn 100010
#define ll long long
struct vec
vec(ll _, ll __): x(_), y(__) {}
vec operator - (const vec& t) const
ll operator ^ (const vec& t) const
bool operator < (const vec& t) const
} ps[maxn], poly[maxn];
int cntp, s[maxn], top;
bool cmp(vec a, vec b)
#define nxt(x) (x + 1) % cntp
#define pre(x) (x + cntp - 1) % cntp
int main()
sort(ps + 1, ps + n + 1);
s[top = 1] = 1;
for(int i = 2; i <= n; i++)
for(int i = 1; i <= top; i++) poly[cntp++] = ps[s[i]];
int upend = cntp - 1;
s[top = 1] = 1;
for(int i = 2; i <= n; i++)
for(int i = top - 1; i > 1; i--) poly[cntp++] = ps[s[i]];
sort(ps + 1, ps + n + 1, cmp);
int l = 0, r = upend; ll ans = 0;
for(int i = 1; i <= n; i++)
printf("%lld\n", ans);
return 0;
}
左手與右手
左手與右手 從 天才 想到的 我發現我們 佩服 的人往往沒能積極的影響我們,有時候反而會限制我們。由於時間或地域的分隔,一些人的成長過程我們是看不到的,但在那些成長過程不被我們看到的人們中,一定會有一些人會在某乙個方面看上去比一般人 長 一些,於是當他 她們突然出現在我們面前的時候,然後我們會被他們...
右手握左手
桌上流行一首順口溜 握著老婆的手,好像右手握左手。每當有人唸出 熟悉的或不熟悉的一桌子人便會意地放聲笑起來,氣氛立刻就輕鬆了。當然,這是基於人家對該順口溜的一致理解 感覺準確,描述到位。有一天在餐桌上有人又唸起這段順口溜,男人們照例笑得起勁。後來發現餐桌上的一位女人沒笑。男人們忙說鬧著玩別當真。沒想...
南陽oj 39 水仙花數
時間限制 1000 ms 記憶體限制 65535 kb 難度 0 描述 請判斷乙個數是不是水仙花數。其中水仙花數定義各個位數立方和等於它本身的三位數。輸入有多組測試資料,每組測試資料以包含乙個整數n 100 n 1000 輸入0表示程式輸入結束。輸出如果n是水仙花數就輸出yes 否則輸出no 樣例輸...