넘치게 채우기

[BOJ] 33614 - 2^3은? 본문

PS/BOJ

[BOJ] 33614 - 2^3은?

riveroverflow 2025. 5. 9. 23:14
반응형

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