-
1327-A, *1100코드포스 2021. 7. 24. 14:21
Problem - 1327A - Codeforces
codeforces.com
문제
- t(1≤t≤105)번의 test case 로 구성되어 있다
- n(1≤n≤107)이 서로다른 k(1≤k≤107)개의 홀수 자연수의 합이 될 수 있나? ~ !
- ! 가 O(log n) 정도의 알고리즘이면 통과할 수 있다
O(t)
k가 주어졌을 때 ! 가 가능한 n들의 집합을 구하자
서로 다른 k개의 홀수 자연수 합의 최소값은
k∑i=1(2i−1)=k2⇒n≥k2또한,
Sum of k odd number={odd,k is oddeven,k is even}따라서 ! 가 가능한 n 집합은 집합 S의 부분집합이다
S={n| n≥k2 and k≡n(mod 2)}Claim
! 가 가능한 n 집합은 S와 같다∵ 서로 다른 k개의 홀수 자연수 합이 최솟값인 경우를 보자
{1, 3, 5, 7, ... , 2k-1}
이때 2k-1을 2씩 증가시켜도, 서로다른 홀수 자연수 집합이다123456789101112131415161718192021#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 && ((k%2) == (n%2)))? "YES": "NO") << endl;}return 0;}cs'코드포스' 카테고리의 다른 글
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