ProblemI Ideal Pyramid (Complex Optimization)

題目大意:

我需要一個蓋一個金字塔,中間要有許多柱子。請寫出一個程式告訴此金字塔的中心點與高。

分析:

非常的數論阿…

先假設他給的每個點都需要蓋一個金字塔(因為必須要大於等於金字塔),這很數學,我太笨,不好解釋。我只能跟你說金字塔是 45 度,所以從中點切面來說會是正三角形,接著 /2,就是等腰三角形,就可以找到解答了!

於是策略如下:

  1. 找最大最小的 xy ,然後求對角線。
  2. 高則透過 (max(MaxX - MinX , MaxY - MinY)+1) /2算一半的對角線就能求出。

疑問

這題有個很奇怪的點,就是因為如果是用 int 是會有 .5 的問題,於是我很貼心的加入四捨五入,但在 submit 時就吃 WA,氣死我了。

以後不要想那麼多,我們寫演算法的。盡量把他想得簡單化,不要太貼心
題目有說只有 int,希望他可以說多一點…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <bits/stdc++.h>
#define LOCAL
#define ll long long
#define Maxn -100000020
#define Minn 100000020
using namespace std;

int main()
{
#ifdef LOCAL
freopen("in1.txt" , "r" , stdin ) ;
#endif
ll n ;
ll MaxX , MinX , MaxY , MinY ;
MaxX = Maxn ;
MinX = Minn ;
MaxY = Maxn ;
MinY = Minn ;
ll a , b , c ;
cin >> n ;
while(n--){
cin >> a >> b >> c ;
MaxX = max(a + c , MaxX);
MinX = min(a - c , MinX);
MaxY = max(b + c , MaxY);
MinY = min(b - c , MinY);
}
int x , y , h , dx , dy ;

//debug
//cout << MaxX << " " << MinX << " " << MaxY << " " << MinY << '\n' ;
x = (MaxX + MinX+1) /2 ;
y = (MaxY + MinY+1) /2 ;
h = (max(MaxX - MinX , MaxY - MinY)+1)/2;
cout << x << ' ' << y << ' ' << h ;
return 0;
}
  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: