Notice
Recent Posts
Recent Comments
Link
넘치게 채우기
[BOJ] 33614 - 2^3은? 본문
반응형
https://www.acmicpc.net/problem/33614
BOJ - 2^3은?
문제 유형: 수학, 애드혹
문제 난이도: Gold V
시간 제한: 1초
메모리 제한: 1024MB
문제
Q: 2^3은 무엇인가요?
피돌이: 1이요!
수돌이: 8이요!
퀴즈 대회에서 이 질문에 대해 피돌이는 ^를 XOR(⊕)로 보아서 2⊕3=1을 답했고 수돌이는 ^를 지수를 나타내는 2^3로 보아서 8이라고 답했다. 이런 혼선을 막기 위해, 퀴즈 대회의 출제자는 ^를 XOR로 볼 때와 지수로 볼 때의 답이 같도록 문제를 만들기로 했다. 하지만 두 개의 수에 대해서 문제를 만드는 것은 너무 쉽다고 생각한 퀴즈 출제자는, 다음과 같이 만들 문제를 바꿨다.
- 세 개의 수 a, b, c에 대해 피돌이와 수돌이가 계산하는 a ^ b ^ c 값이 같아야 한다.
- 피돌이는 ^기호를 항상 XOR로 본다. 즉 a ^ b ^ c를 a⊕b⊕c로 계산한다.
- 수돌이는 ^기호를 항상 지수로 본다. 즉 a ^ b ^ c를 abc로 계산한다. abc를 계산할 때는 먼저 bc를 계산한 후 이 값이 a의 지수에 있다고 생각하여 계산한다.
a, b, c는 각각 a≤p, b≤q, c≤r을 만족하는 양의 정수일 때, 위 조건을 만족하는 세 값 (a,b,c)로 가능한 경우의 수를 구해보자. 단, 답이 너무 커질 수 있으므로 답을 1000000007로 나눈 나머지를 구해보자.
입력
첫째 줄에 테스트 케이스의 개수 T 가 주어진다. (1≤T≤1 000)
각 테스트 케이스의 첫째 줄에 양의 정수 p, q, r 이 공백을 두고 주어진다. (1≤p, q, r≤107)
모든 테스트 케이스에서 p의 합, q의 합, r의 합은 각각 10^7을 넘지 않는다.
출력
각 테스트 케이스의 첫째 줄에 세 값 (a, b, c)로 가능한 경우의 수를 1000000007로 나눈 나머지를 출력한다.
풀이
a=1일때, b=c인경우 만족하고, a >= 2일때, b=c=1인경우에 만족한다.
이를 모두 집계해주자.
코드
C++
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
void solve() {
int p, q, r;
cin >> p >> q >> r;
cout << (min(q, r) + (p - 1)) % MOD << "\n";
}
int main(int argc, char *argv[]) {
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}반응형
'PS > BOJ' 카테고리의 다른 글
| [BOJ] 11735 - 정산소 (0) | 2025.05.11 |
|---|---|
| [BOJ] 1607 - 원숭이 타워 (0) | 2025.05.11 |
| [BOJ] 2636 - 치즈 (0) | 2025.05.08 |
| [BOJ] 25636 - 소방차 (0) | 2025.05.07 |
| [BOJ] 17453 - 두 개의 문 (0) | 2025.05.06 |