코드그라운드 다트
/* 동적할당과 솟팅에 대한 개념이 들어 있습니다. 그리고 나서 완전탐색에 대해서 풀어보도록 하겠습 니다. 그리고 문제풀이를 할때, 내 생각대로 구현하는 방법 연습을 한번씩 해야, 그것이 풀어지는 것 같습니다. 싱글, 두배, 세배, 아웃ㅍ보터, 불 좌표평면으로 옮겨 생각합니다. 정우가 다트핀을 엔번 던졌을 때 얻은 총 점수를 구하세요. 첫쨰 줄에 테스트 케이스의 개수가 나타나는 자연수 티가 있고 테개의 테스트 케이스가 주어집니다. 첫쨰는 불의 반지름, 트리플 시작구간의 밪ㄴ지름 종류 구간 씨 더블 시작 구간 반지를 디 더블 ㅈ오료 이 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 에 저장을 한다음에 ㅈ