[Codeforces 1323A] Even Subset Sum Problem

Mar 8, 2020


[Codeforces 1323A] Even Subset Sum Problem

문제 요약

테스트 케이스의 개수가 주어지고 각 테스트 케이스에서 N개의 정수가 주어졌을 때, 1개 이상의 정수를 합하여 짝수가 되는 경우 중 한 가지를 구하는 문제

풀이

간단한 문제임을 알 수 있다.
한 개 이상의 정수를 합하여 짝수가 되는 경우는 한 개 이상의 짝수들의 합 or 짝수 개의 홀수들의 합, 이 두 가지 경우인데,
경우의 수나 모든 경우를 구하는 것이 아니기 때문에 한 개의 짝수나 두 개의 홀수를 발견했을 때의 경우를 출력하면 된다.

코드

#include <iostream>
using namespace std;
int t, n;
int main() {
    for (scanf("%d", &t); t--;) {
        scanf("%d", &n);
        int even_or_odd = -1, ans[] = {0,0};
        for (int i = 1, num; i <= n; i++) {
            scanf("%d", &num);
            if (even_or_odd < 0) {
                if (num & 1) {
                    if (ans[0]) {
                        ans[1] = i;
                        even_or_odd = 1;
                    } else ans[0] = i;
                } else {
                    ans[0] = i;
                    even_or_odd = 0;
                }
            }
        }
        if (even_or_odd == -1) puts("-1");
        else if (even_or_odd) printf("2\n%d %d\n", ans[0], ans[1]);
        else printf("1\n%d\n", ans[0]);
    }
    return 0;
}