演算法提高 The Sky is the Limit

2021-08-15 18:37:55 字數 1866 閱讀 1692

問題描述

banff城雇用了一家廣告公司來提公升這座城市對潛在的遊客的吸引力。其中乙個計畫中的口號聲稱延伸在這座城市周圍的山脈組成了加拿大最美麗的天際線。但是加拿大消費者保護協會認為「最美麗的天際線」是一種主觀的,無法證實的聲稱,而且可能因此讓人誤解。

然後那個廣告公司就想出了乙個口號「banff——加拿大最長的天際線」。雖然沒有那麼引人注意,但這是有希望能證實的,而且這樣就能被加拿大複雜的廣告法律所接受了。

這就是你要介入的原因。廣告公司需要的是乙個能確定天際線的長度的程式。把每座山脈看作是乙個二維的上面兩條邊長度相等的三角形。一條天際線是一座或多座山脈的輪廓。天際線的長度就是輪廓的總長度。下面的左圖顯示了三座山脈。右圖顯示了(用黑線)天際線和(用虛線)山脈上面的邊中不是天際線的部分。注意位於山脈之間的地平線部分不在天際線考慮的範圍內。

輸入格式

第一行包含乙個正整數n,表示範圍內的山脈數。接下來n行每行用三個整數x,h,b來描述每一座山脈,分別表示山脈的最高點到某個固定的點的水平距離,山脈的垂直高度和山脈的底邊的寬度。每座山脈的底部在同一條水平線上。資料滿足n≤100,h>0而且b>0。

輸出格式

輸出只有一行,即天際線的長度。輸出那個長度四捨五入後的結果。

樣例輸入

3 20 30 35

37 24 29

60 20 13

樣例輸出

138

資料規模和約定

對於20%的資料,1≤n≤5

對於50%的資料,1≤n≤30

對於100%的資料,1≤n≤100

思路:很容易想到離散化,將三角形三個點的橫座標以及沒兩條斜邊所在的直線的交點記錄下來,然後去重,求出所有x與所有線段(不是直線)相交的最大值(縱座標),然後求相鄰兩個點的距離之和即可,注意去除兩個三角形相隔的部分還有不滿足條件的點

#include

#include

#include

#include

#include

const

int maxn = 1e3 + 10;

const

double eps = 1e-7;

using

namespace

std;

struct line

line(double a, double b, double c, double sx, double ex) :

a(a), b(b), c(c), sx(sx), ex(ex) {}

} lne[maxn];

double x[maxn * 100], y[maxn * 100];

int numl, numx, numy;

int n, kase = 1;

double pointx(line a, line b)

double pointy(double xx)

return sy;

} int main()

for(int i = 0; i < numl; i++)

} sort(x, x + numx);

int num = unique(x, x + numx) - x;

for(int i = 0; i < num; i++)

double ans = 0;

for(int i = 0; i < num - 1; i++)

printf("%.0f",ans);

return

0;

}

演算法提高 掃雷

問題描述 掃雷遊戲你一定玩過吧!現在給你若干個n m的地雷陣,請你計算出每個矩陣中每個單元格相鄰單元格內地雷的個數,每個單元格最多有8個相鄰的單元格。0輸入格式 輸入包含若干個矩陣,對於每個矩陣,第一行包含兩個整數n和m,分別表示這個矩陣的行數和列數。接下來n行每行包含m個字元。安全區域用 表示,有...

演算法提高 掃雷

問題描述 掃雷遊戲你一定玩過吧!現在給你若干個n m的地雷陣,請你計算出每個矩陣中每個單元格相鄰單元格內地雷的個數,每個單元格最多有8個相鄰的單元格。0field 2 100 33200 1 100 注意兩個矩陣之間應該有乙個空行,由於oj的格式化這裡不能顯示出來 資料規模和約定0 includev...

演算法提高 斷案

問題描述 公安人員審問甲 乙 丙 丁四個嫌疑犯,已確知,這四個人當中僅有一人是偷竊者,還知道這四個人的答話,要麼完全誠實,要麼完全說謊。在回答公安人員的問話中 甲說 乙沒有偷,是丁偷的。乙說 我沒有偷,是丙偷的。丙說 甲沒有偷,是乙偷的。丁說 我沒有偷,我用的那東西是我家裡的。請根據上述四人答話,判...