카테고리 없음

코드그라운드 다트

OKOK 2018. 1. 24. 10:23

/*

동적할당과 솟팅에 대한 개념이 들어 있습니다. 그리고 나서 완전탐색에 대해서 풀어보도록 하겠습

니다. 그리고 문제풀이를 할때, 내 생각대로 구현하는 방법 연습을 한번씩 해야, 그것이

풀어지는 것 같습니다.

싱글, 두배, 세배, 아웃ㅍ보터, 불 좌표평면으로 옮겨 생각합니다. 정우가 다트핀을 엔번 던졌을 때 얻은 총 점수를 구하세요.

첫쨰 줄에 테스트 케이스의 개수가 나타나는 자연수 티가 있고

테개의 테스트 케이스가 주어집니다.

첫쨰는 불의 반지름, 트리플 시작구간의 밪ㄴ지름 종류 구간 씨

더블 시작 구간 반지를 디 더블 ㅈ오료 이 5개가 주어집니다. 오케이요.

그 다음으로 5번 쏘아서 엑스 와이가 공백을 사이에 두고 차례라로 주어집니다. 

이는 다트판의 중심을 원점으로 두었을 때 다트의 위치입니다. 이 때, 오케이.

인풋 아웃풋 그리고 풀이를 해보도록 하겠습니다.


반원을 어떻게 그리지요? 그리고 문제 이해가 조금 난해 한대, 어디가 싱글이고 더블이고 트리플인가요.

범위가 50~60, 80~90 사이 인지 그리고 0~10 인지 체크를 하면 됩니다. 오케이요 그리고 나머지 

다른 제외한 곳들은 싱글점수를 얻게 됩니다. 


원형으로 생긴 다트판의 영역을 나누기 위해서 원형 좌표계를 이용합니다.

r = sqrt(x*x + y*y);

theta = atan2(y,x);



*/


#include <iostream>

#include <algorithm>

#include <math.h>


using namespace std;


struct _dart

{

float x;

float y;

};


int A, B, C, D, E;

int N;

int res;

struct _dart dart[10001];


void problem_in()

{

int i;

cin >> A >> B >> C >> D >> E;

cin >> N;

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

{

cin >> dart[i].x >> dart[i].y;

}

}


void problem_out(int T) {

cout << "Case #" << T << endl

<< res << endl;

}


void solving()

{

int i;

float x, y, r, theta;

int s_ind;

int score[20] = { 11,8,16,7,19,3,17,2,15,10,6,13,4,18,1,20,5,12,9,14 };

res = 0;

for (i = 0; i < N; i++) {

x = dart[i].x;

y = dart[i].y;

r = sqrt(x*x + y*y);

theta = atan2(y, x) * 10 / 3.141592;

s_ind = int(theta + 10.5) % 20;


if (r < A) res += 50;

else if (B < r && r < C) res += 3 * score[s_ind];

else if (D < r && r < E) res += 2 * score[s_ind];

else if (r < E) res += score[s_ind];

}

}

int main() {

int T, it;

cin >> T;

for (it = 1; it <= T; it++) {

problem_in();

solving();

problem_out(it);

}


system("pause");

return 0;


x, y 에 저장을 한다음에 ㅈ