fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 7213 (C++) Akmuo, popierius, žirklės
최초 업로드: 2025-11-02 10:15:28
최근 수정 시간: 2025-11-02 10:15:28
게시자: rlatjwls3333
카테고리: 백준
조회수: 11
# [Bronze I] Akmuo, popierius, žirklės [문제 링크](https://www.acmicpc.net/problem/7213) ## 문제 설명 <p>Vilius ir Adomas žaidžia žaidimą „Akmuo, popierius, žirklės“. Žaidėjai kartu skaičiuoja „vienas… du… trys…“ ir tuo pačiu metu mojuoja kumščiais. Sakant „trys“ kiekvienas žaidėjas viena ranka parodo vieną iš trijų ženklų: akmenį, žirkles ar popierių. Laimėtojas nustatomas taip:</p> <ul> <li>Akmuo laimi prieš žirkles (akmuo bukina ar laužo žirkles)</li> <li>Žirklės laimi prieš popierių (žirklės karpo popierių)</li> <li>Popierius laimi prieš akmenį (popierius uždengią akmenį)</li> <li>Jei žaidėjai parodo vienodus ženklus, tai laikoma lygiosiomis</li> </ul> <p>Vilius ir Adomas žais žaidimą daug kartų, tad sugalvojo tokią taškų sistemą:</p> <ul> <li>Abu žaidėjai pradeda su 0 taškų</li> <li>Laimėjusio žaidėjo taškų skaičius padidėja vienetu</li> <li>Pralaimėjusio žaidėjo taškų skaičius sumažėja vienetu</li> <li>Lygiųjų atveju taškų skaičius nesikeičia</li> </ul> <p>Vilius ir Adomas sužaidė jau nemažai žaidimų, bet pamiršo savo turimų taškų kiekį! Kiekvienas jų prisimena, kiek kartų kokį ženklą (akmenį, popierių ir žirkles) rodė, bet neprisimena kokia tvarka. Padėkite jiems nustatyti, kiek daugiausiai bei kiek mažiausiai taškų gali turėti Vilius (žinodami Viliaus taškų kiekį, Adomo taškus suskaičiuos patys).</p> <p>Nustatykite, kiek daugiausiai bei kiek mažiausiai taškų gali turėti Vilius.</p> ## 입력 <p>Pirmoje eilutėje pateikti 3 sveikieji skaičiai a<sub>1</sub>, p<sub>1</sub>, z<sub>1</sub>, nurodantys, kiek kartų Vilius parodė atitinkamai akmenį, popierių bei žirkles. Antroje eilutėje ta pačia tvarka pateikti Adomo parodytų ženklų kiekiai a<sub>2</sub>, p<sub>2</sub>, z<sub>2</sub>.</p> ## 출력 <p>Pirmoje eilutėje išveskite didžiausią galimą, o antroje – mažiausią galimą Viliaus turimų taškų kiekį.</p> ## 풀이 높은 점수는 이기는 경우 -> 지는 경우 순으로 살펴보고, 낮은 점수는 지는 경우 -> 이기는 경우 순으로 살펴보면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; int cnt[2][3], tmp[2][3]; int main() { ios::sync_with_stdio(0); cin.tie(0); for(int i=0;i<2;i++) for(int j=0;j<3;j++) cin >> cnt[i][j]; int maxSum=0; memcpy(tmp, cnt, sizeof cnt); for(int i=0;i<3;i++) { int cur = min(tmp[0][(i+1)%3], tmp[1][i]); tmp[0][(i+1)%3]-=cur; tmp[1][i]-=cur; maxSum += cur; } for(int i=0;i<3;i++) maxSum -= min(tmp[0][i], tmp[1][(i+1)%3]); int minSum=0; for(int i=0;i<3;i++) { int cur = min(cnt[0][i], cnt[1][(i+1)%3]); cnt[0][i]-=cur; cnt[1][(i+1)%3]-=cur; minSum -= cur; } for(int i=0;i<3;i++) minSum += min(cnt[0][(i+1)%3], cnt[1][i]); cout << maxSum << '\n' << minSum; } ```