문자열 - 아호 코라식(Aho-Corasick)
아호 코라식(Aho-Corasick)에 대해 알아보자.
[2166 다각형의 면적] https://www.acmicpc.net/problem/2166 .
신발끈 공식을 이용하여 다각형의 면적을 구해보자
점들로 구성된 다각형의 넓이를 구하는 문제로 신발끈 공식을 이용하여 구할 수 있다.
점의 최대 좌표는 100000이고 그렇다면 면적을 구할 때 int형을 사용하면 overflow가 나온다.
따라서 면적 구하는 과정에서 long long형을 사용하고 마지막에 나누기 연산을 하고 나서는 double형을 사용하겠다.
신발끈 공식은 아래 사진과 같다.
이 공식은 오목다각형과 볼록 다각형 모두 성립하므로 사용해도 좋다.
문제는 self-intersect한 다각형에서는 신발끈 공식이 성립하지 않는다는 것이다.
self-intersect인 다각형의 예시는 아래와 같다.
4점 안에서 교차하는 경우인 것이다.
이런경우 다각형이 2개 이상 생겨버려 신발끈 공식을 쓰면 넓이가 상쇄되곤 한다.
알아보니 이 문제는 simple polygon(단순 다각형)만 테스트케이스에 주어지는듯 하다.
찝찝하지만 골드5문제인데 self-intersect까지 쓰기 뭐해서 그냥 제출했다.
나는 틀렸습니다를 하나 받았는데 그 이유는 배열 마지막에 처음 좌표를 넣어두고(계산의 편의를 위함) 그걸 신경쓰지 않고 계산했기 때문이다.
pair를 이용하여 좌표를 나타냈고.
가장 중요한것은 calculateArea 함수의 for문에서 i를 vec 사이즈보다 하나 덜 연산하는 것이다.
왜냐하면 처음에 배열에 마지막원소에 처음원소를 추가했기 때문이다.(신발끈 공식이용의 편의를 위해)
#include <iostream>
#include <vector>
#include <utility>
#include <cmath>
using namespace std;
typedef long long ll;
double calculateArea(vector<pair<ll, ll>> &vec){
double ret =0;
for(int i=0;i<vec.size()-1;i++){
ret += vec[i].first*vec[i+1].second - vec[i+1].first*vec[i].second;
}
return abs(ret)/2.0;
}
int main(){
cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false);
int n;
cin >> n;
vector<pair<ll, ll>> points(n+1);
for(int i=0;i<n;i++){
cin >> points[i].first >> points[i].second;
}
points[n].first = points[0].first;
points[n].second = points[0].second;
cout << fixed;
cout.precision(1);
cout << calculateArea(points);
}
아호 코라식(Aho-Corasick)에 대해 알아보자.
docker를 이해해보자
2060 염소줄서기 풀이 및 코드
분할정복을 이용한 다이나믹 프로그래밍 최적화
코드포스 다시 열심히! 블로그도 열심히!
rust 공부시작!
코드포스 블루 달성 후기
여름캠프 및 SUAPC 후기
2023-05-25-Edu Codeforce round 149 (Div.2)
2023-05-13-Edu Codeforce round 148 (Div.2)
HLD(Heavy Light Decomposition)
행렬 거듭 제곱
2023-05-02-It takes two
Codeforce round 868 (Div.2)
2월 11일 문제풀이
Codeforces#846, TypeDB Foreces 2023, Codeforces#848 업솔빙
ps5 게임 : 용과같이 제로 리뷰
백준 23877번 Convoluted Intervals 문제풀이
codeforce round #828(div 3), EDU #137(div 2) 업솔빙
codeforce round #823(div 2), #824(div 2) 업솔빙
AtCoder Beginner Contest 270 업솔빙
ps5 게임 : 용과같이 극 1 리뷰
백준 18719번 Binomal 문제풀이
백준 14288번 회사문화4 문제풀이
백준 3308번 Matching 문제풀이
백준 18186번 라면사기(large) 문제풀이
백준 4196번 도미노 문제풀이
백준 3176번 도로 네트워크 문제풀이
백준 16367번 TV Show Game 문제풀이
ps5 게임 : 페르소나 5 더 로열 리뷰
codeforce round #811(div 3), #812(div 2), CodeTon round 2 업솔빙
백준 21162번 뒤집기 K 문제풀이
codeforce round #808(div 2), #803(div 2, virtual) 업솔빙
codeforce round #807(div 2) 업솔빙
백준 10167번 금광 문제풀이
codeforce round #805(div 3), #806(div 4) 업솔빙
백준 18253번 최단경로와 쿼리 문제풀이
에듀 라운드 131 업솔빙
백준 1949번 우수 마을 문제풀이
백준 3665번 최종 순위 문제풀이
Trie 자료구조 이해하기
merge sort를 이용하여 inversion 개수세기
3솔의 벽이 너무 높다..
lazy propagation없이 구간 갱신하기
코드포스 폭망기념 upsolving
백준 11505 구간 곱 구하기 문제풀이
백준 1305 광고 문제풀이
백준 4386 별자리 만들기 문제풀이
백준 4803 트리
백준 2206 벽 부수고 이동하기 문제풀이
백준 2166 다각형의 면적 문제풀이
백준 12015 가장 긴 증가하는 부분 수열2 문제풀이
백준 10986 나머지합 문제풀이
스택 구현하기 ========== 자료구조의 기본이라고 하면 스택 과 큐가 있다 백준 10828번에서 마주친 스택
매우매우 많은 정렬이 있지만 그중 가장 안 어려운 3가지를 공부해보았다.
Leave a comment