Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
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
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(25308) 방사형 그래프 본문

백준 (C++)/Solve

(25308) 방사형 그래프

dh-winternagi 2026. 4. 22. 00:24

https://www.acmicpc.net/problem/25308

단계별로 풀어보기

39단계(기하 2) 3번째

 

 

 

모든 경우의 수 8!=40320에 대해 ccw를 돌려 볼록 다각형인지 확인하면 된다.

이때 8개 점의 좌표는 능력치 값 그대로가 아닌 방향에 따른 추가 계산을 해줘야 한다는 점에 주의.

 

 

 

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
  int a[8], v[8]= {0, 1, 2, 3, 4, 5, 6, 7}, ans= 0;
  
  for(int i=0;i<8;i++)  cin >> a[i];
  
  auto ccw= [&](){
    long cx[8]= {0, 7071*a[v[1]], 10000*a[v[2]], 7071*a[v[3]], 0, -7071*a[v[5]], -10000*a[v[6]], -7071*a[v[7]]};
    long cy[8]= {10000*a[v[0]], 7071*a[v[1]], 0, -7071*a[v[3]], -10000*a[v[4]], -7071*a[v[5]], 0, 7071*a[v[7]]};
    
    for(int i=0;i<8;i++){
      if((cx[(i+1)%8]-cx[i])*(cy[(i+2)%8]-cy[i])>(cx[(i+2)%8]-cx[i])*(cy[(i+1)%8]-cy[i])){
        return false;
      }
    }
    
    return true;
  };
  
  do{
    ans+= ccw();
  }while(next_permutation(v, v+8));
  
  cout << ans;
  
  return 0;
}

'백준 (C++) > Solve' 카테고리의 다른 글

(17387) 선분 교차 2  (0) 2026.04.22
(17386) 선분 교차 1  (0) 2026.04.22
(11758) CCW  (0) 2026.04.21
(2166) 다각형의 면적  (0) 2026.04.21
(33918) 맛있는 스콘 만들기  (0) 2026.04.21