fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 7124 (C++) Sarnased kolmnurgad
최초 업로드: 2025-09-21 17:43:38
최근 수정 시간: 2025-09-22 08:08:25
게시자: rlatjwls3333
카테고리: 백준
조회수: 4
# [Bronze I] Sarnased kolmnurgad [문제 링크](https://www.acmicpc.net/problem/7124) ## 문제 설명 <p>Juku õpib koolis kolmnurkade sarnasust ja saab teada, et kolmnurgad on sarnased, kui nende vastavate nurkade suurused on võrdsed ja vastavate külgede pikkused võrdelised. Sarnased kolmnurgad võivad olla omavahel pööratud, peegeldatud ja nihutatud. Sarnaste kolmnurkade vastavate külgede pikkuste jagatist nimetatakse nende sarnasusteguriks.</p> <p>Kodutööna saab ta hulga kolmnurki, mille sarnasustegureid on vaja määrata. Kuna 21. sajandil sobivad arvutamiseks rohkem arvutid kui inimesed, aita Jukul kirjutada programm, mis selle töö tema eest ära teeb.</p> ## 입력 <p>Tekstifaili esimesel real on kuus täisarvu lõigust $-10^9$ kuni $10^9$: esimese kolmnurga tippude x- ja y-koordinaadid. Teisel real on samuti kuus arvu: teise kolmnurga tippude koordinaadid. Tipud võivad olla antud nii päripäeva kui vastupäeva järjekorras. Antud punktid moodustavad alati kolmnurga (pole ühtelangevaid punkte ega sirgnurki).</p> ## 출력 <p>Kui kolmnurgad on sarnased, siis kirjutada tekstifaili täpselt üks reaalarv (täpsusega vähemalt $0{,}0001$), mis näitab, mitu korda on esimene kolmnurk suurem kui teine (kui esimene kolmnurk on väiksem, on ka vastus väiksem kui $1$). Kui kolmnurgad ei ole sarnased, kirjutada väljundfaili $-1$.</p> ## 풀이 실수 오차 때문에 세 변의 길이의 제곱을 사용해서 두 삼각형이 닮음임을 확인했습니다. (SSS 닮음 사용) ``` c++ #include<bits/stdc++.h> using namespace std; typedef long long ll; struct pos { ll x, y; }; ll getDist(pos a, pos b) { return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } int main() { ios::sync_with_stdio(0); cin.tie(0); vector<pos> a(3), b(3); for(int i=0;i<3;i++) cin >> a[i].x >> a[i].y; for(int i=0;i<3;i++) cin >> b[i].x >> b[i].y; vector<ll> aLen, bLen; for(int i=0;i<3;i++) aLen.push_back(getDist(a[i], a[(i+1)%3])); for(int i=0;i<3;i++) bLen.push_back(getDist(b[i], b[(i+1)%3])); sort(aLen.begin(), aLen.end()); sort(bLen.begin(), bLen.end()); if(aLen[0]*bLen[1] != aLen[1]*bLen[0] || aLen[1]*bLen[2] != aLen[2]*bLen[1]) cout << -1; else cout << fixed << setprecision(4) << sqrt((double)aLen[0]/bLen[0]); } ```