개인공부용123 프로그래밍 블로그

AlgoSpot) DARPA 본문

알고리즘문제

AlgoSpot) DARPA

개인공부용123 2017. 1. 31. 22:12

문제 : https://algospot.com/judge/problem/read/DARPA


카메라를 설치할때 가장 가까운 두카메라의 간격을 최대화 하는 문제입니다.


이분법과 그리디알고리즘을 이용해서 풀었습니다.


100번 반복문을 실행하는이유는 절대오차가 10^-7보다 작게하기위해서입니다.



#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;

int N, M; // 카메라수 중계소수
vector loc;

bool decision(double gap) {
	int install = 0;
	double min_limit = -1;

	for (int i = 0; i < loc.size(); ++i) {
		if (min_limit <= loc[i]) {
			++install;
			min_limit = loc[i] + gap;
		}
	}
	return install >= N;
}

double optimize() {
	double lo = 0; double hi = 240;

	for (int i = 0; i < 100; ++i) {
		double mid = (lo + hi) / 2.0;

		if (decision(mid)) {
			lo = mid;
		}
		else
		{
			hi = mid;
		}
	}

	return hi;
}



int main() {
	std::ios::sync_with_stdio(false);

	int C;
	cin >> C;

	while (C--) {
		cin >> N >> M;
		double pos;

		for (int i = 0; i < M; ++i) {
			cin >> pos;
			loc.push_back(pos);
		}

		cout << fixed << setprecision(2);
		cout << optimize() << endl;

		loc.clear();
	}
	return 0;
}


'알고리즘문제' 카테고리의 다른 글

AlgoSpot) CANADATRIP  (0) 2017.02.06
AlgoSpot) ARCTIC  (0) 2017.02.03
AlgoSpot) ALLERGY  (0) 2017.01.22
AlgoSpot) QUADTREE  (1) 2017.01.21
AlgoSpot) STRJOIN  (0) 2017.01.16