Processing math: 80%

ABOUT ME

Today
Yesterday
Total
  • 1327-A, *1100
    코드포스 2021. 7. 24. 14:21
     

    Problem - 1327A - Codeforces

     

    codeforces.com

    문제

    • t(1t105)번의 test case 로 구성되어 있다
    • n(1n107)이 서로다른 k(1k107)개의 홀수 자연수의 합이 될 수 있나? ~ !
    • ! 가 O(log n) 정도의 알고리즘이면 통과할 수 있다

     

    O(t)

    k가 주어졌을 때 ! 가 가능한 n들의 집합을 구하자

    서로 다른 k개의 홀수 자연수 합의 최소값은
    ki=1(2i1)=k2nk2

    또한,
    Sum of k odd number={odd,k is oddeven,k is even}

    따라서 ! 가 가능한 n 집합은 집합 S의 부분집합이다
    S={n| nk2 and kn(mod 2)}

     

    Claim
    ! 가 가능한 n 집합은 S와 같다

    서로 다른 k개의 홀수 자연수 합이 최솟값인 경우를 보자
    {1, 3, 5, 7, ... , 2k-1}
    이때 2k-1을 2씩 증가시켜도, 서로다른 홀수 자연수 집합이다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <bits/stdc++.h>
    #define endl "\n"
    using namespace std;
    typedef long long ll;
     
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0), cout.tie(0);
     
        int t;
        cin >> t;
        ll n, k;
        while(t--){
            cin >> n >> k;
            cout << ((n >= k*&& ((k%2== (n%2)))? "YES""NO"<< endl;
        }
     
     
        return 0;

    '코드포스' 카테고리의 다른 글

    25-A, *1300  (0) 2021.07.24
    467-B, *1100  (0) 2021.07.24
    1335-C, *1100  (0) 2021.07.23
    368-B, *1100  (0) 2021.07.23
    313-B, *1100  (0) 2021.07.23

    댓글

Designed by Tistory.