본문 바로가기

코드포스

[코드포스 Practice8] C. Obtain Two Zeroes

You are given two integers a and b. You may perform any number of operations on them (possibly zero).

당신에게 a와 b 두개의 정수가 주어졌다. 당신은 이 숫자들에 몇번이라도 연산할 수 있다. (0번이어도 됨)


During each operation you should choose any positive integer x and set a:=a−x, b:=b−2x or a:=a−2x, b:=b−x. Note that you may choose different values of x in different operations.

각 연산을 하는 동안 당신은 어떤 양의 정수 x를 골라서 a:=a−x, b:=b−2x or a:=a−2x, b:=b−x 이렇게 할 수 있다. 다른 연산마다 x의 값을 달리 설정해줘야 한다는 걸 알아두세요.


Is it possible to make a and b equal to 0 simultaneously?

a와 b를 0으로 동시에 만드는 게 가능한가요??


Your program should answer t independent test cases.

당신의 프로그램은 t개의 독립적인 테스트 테이스에 답을 해야합니다.


Input
The first line contains one integer t (1≤t≤100) — the number of test cases.

첫번째 줄은 하나의 정수 t를 포함합니다. -- 테스트 케이스의 개수임


Then the test cases follow, each test case is represented by one line containing two integers a and b for this test case (0≤a,b≤10^9).

다음으로 테스트 케이스들이 뒤따릅니다. 각각의 테스트는 한 줄에 두 개의 정수 a와 b를 포함해서 나타내집니다. 


Output
For each test case print the answer to it — YES if it is possible to make a and b equal to 0 simultaneously, and NO otherwise.

각 테스트 케이스마다 답을 출력합니다 -- a와 b를 동시에 0으로 만드는게 가능하다면 YES를 출력하고 아니면 NO를 출력하세요. 


You may print every letter in any case you want (so, for example, the strings yEs, yes, Yes and YES will all be recognized as positive answer).

당신은 당신이 원하는 어떠한 종류의 모든 문자라도 출력할 수 있습니다. (예를 들어 ~~~이런것들은 모두 긍정적인 대답으로 인식 될 것 입니다. )


난리났다 

난리났어

 

이게 그 유명한 디피인가 생각 들었는데 숫자가 10^9라 과정 찾으려면 시간 엄청 걸리겠다 싶어서 그만뒀음 (사실 어떻게 푸는지도 모른다) 처음에는 값이 하나가 짝수고 하나가 홀수여야 하나? 그런 생각 들었는데 둘 다 홀수인 경우도 있고 또 값이 똑같은데 맞는 경우도 있고 틀린 경우도 있고.. 감도 못 잡고 끝났다ㅋㅋㅋ

 

풀어보겠다고 시도해본 것들.. 

알듯말듯하다.

 

D번 정리하고 다시 잡아봐야지

 


 

 

막 또 문제 잡고 있다가 보니깐 규칙이 보였다. 저 (1, 1) 부분이 k개 있으면 나머지가 a-k개랑 b-k개가 남는데 이 두개 더하면 k개랑 같다. 그래서 어.. 어.. / 두개 더한거랑 k랑 같으니 방정식 세우면 결국 a + b = 3k가 됨.. 아니 .. ㅋㅋ

ㅋㅋ

ㅎㅎ

ㅋㅋ

 

 

#include <iostream>

using namespace std;

int main() {
    int q;
    scanf("%d", &q);
    
    for(int i = 0; i < q; i++){
        int n, m;
        scanf("%d %d", &n, &m);
        
        int minNum = min(n, m);
        int maxNum = max(n, m);
        
        if(minNum*2 < maxNum){
            printf("NO\n");
            continue;
        }
        
        if((n+m)% 3 == 0)
            printf("YES\n");
        else
            printf("NO\n"); 
        
    }
    
    return 0;
}

이게 뭐람 어이없어

 

 

+)

You may perform any number of operations on them (possibly zero). 

이게 연산 횟수에 대한 말이었구나. 자주 쓰이는 것 같다. 

연산해도 되고 안 해도 된다! (possibly zero). 

 

 

+) 지금 생각해보니 안 터진게 다행이다. int가 21억이니 20억까지밖에 안 가서 통과된듯ㅎㅎ