2개의 댓글이 있습니다.
-
-
astein -
이번 Med 문제와 비슷한 문제를 밑에 링크걸어둘께요..
http://algospot.com/zbxe/?mid=editorial&search_target=user_id&search_keyword=astein&document_srl=48797&listStyle=&cpage=
B번 문제입니다 'ㅅ'
17년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.

Toivoa
SRM 392에서 0점맞고 에디토리얼 쓰고 1년만에 SRM 에디토리얼 쓰는 Toivoa 입니다.

개인적으로는 TopCoder 시작한지 5년만에 레드를 찍은 SRM이었습니다.
결과는 위와 같았습니다. 한국인 중에 Hard를 푼 사람이 아무도 없었습니다.
[Easy - BestView]
직선 위에 건물들이 있습니다. 건물의 높이가 주어지고, 어떤 건물의 옥상에서 다른 건물들의 옥상이 몇개나 보이는지 알아내는 문제입니다.
[spoiler="해설"]저는 어떤 건물의 옥상에서 다른 건물의 옥상이 몇개나 보이는지는 해당 건물을 중심으로 앞/뒤로 보면서 tangent 값 - (높이 차이) / (거리) - 이 줄어드는 건물이 몇개 있는지 세어보면서 풀었습니다.
이 외에도 ccw를 이용해서 세어보는 등의 방법이 존재합니다.
~~~ cpp
#include heights)
#include
using namespace std;
class BestView
{
public:
int numberOfBuildings(vector
{
int ret = 0;
int n = heights.size();
for (int i = 0; i < n; ++i)
{
int t = 0;
double x = 1e+100;
for (int j = i - 1; j >= 0; --j)
{
double k = double(heights[i] - heights[j]) / double(i - j);
if (x > k)
{
t++;
x = k;
}
}
x = 1e+100;
for (int j = i + 1; j < n; ++j)
{
double k = double(heights[i] - heights[j]) / double(j - i);
if (x > k)
{
t++;
x = k;
}
}
ret >?= t;
}
return ret;
}
};
[/spoiler]
[Hard - CircularShifts]
같은 길이를 가지는 두 수열 x, y가 있습니다. 두 수열을 임의로 circular shift 하여 x[0] * y[0] + x[1] * y[1] + ... + x[n - 1] * y[n - 1] 의 최대 값을 구해야 합니다.
수열을 circular shift한다는 것은 x'[0] = x[1], x'[1] = x[2], ... x'[n - 1] = x[0] 입니다.
이 문제의 풀이는 JongMan님이 알고계십니다.
17년 전