蓝桥杯-数组分割

问题描述
小蓝有一个长度为 N 的数组 A =「Ao,A1,…,A~-1]。现在小蓝想要从 A 对应的数组下标所构成的集合I =0,1,2,… N-1 中找出一个子集 民1,那么 民」在I中的补集为Rz。记S=∑reR 4,S2=∑rERA,,我们要求S、和 S,均为偶数,请问在这种情况下共有多少种不同的 R,。当 民或 R,为空集时我们将 S.或 S₂视为 0。
输入格式
第一行一个整数 工,表示有 工 组数据。
接下来输入 工 组数据,每组数据包含两行:第一行一个整数 N表示数组 4 的长度;第二行输入 N 个整数从左至右依次为Ao,A1,……AN-1,相邻元素之间用空格分隔。
输出格式
对于每组数据,输出一行,包含一个整数表示答案,答案可能会很大,你需要将答案对 1000000007 进行取模后输出

样例说明
对于第一组数据,答案为 4。(注意:大括号内的数字表示元素在数组中的下标。)
R=0,Rz=1;此时S=Ao=6为偶数,Sz=A1=6为偶数。
R=1,Rz=0;此时S=A1=6为偶数,Sz=4o=6为偶数。
R=0,1,Rz= ;此时S= Ao+ A」= 12 为偶数S,-0为偶数。
R1=,Rz=0,1;此时S1=0为偶数,Sz=Ao+A1=12 为偶数。
对于第二组数据,无论怎么选择,都不满足条件,所以答案为 0
评测用例规模与约定
对于
% 的评测用例,1<N<10.
对于
% 的评测用例,1<N<102
对于100%的评测用例,1<T<10,1<N<10,0<A<109
运行限制
语言
C++
Java
Python3
PyPy3
Go
JavaScript
最大运行时间1S1S2s
3s
3s
3s
3s
最大运行内存
512M
512M
512M
512M
512M
512M
512M
当奇数的个数为奇数时,和为奇数,不满足题意
当奇数的个数为偶数时,和为偶数,满足题意。此时种数为2的偶数个数的次方 x 2的奇数个数的次方

// 参考@张峻齐
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        int[] ans = new int[T];
        for (int i = 0; i < T; ++i) {
            int N = scanner.nextInt();
            int evenCount = 0, oddCount = 0;
            for (int j = 0; j < N; ++j) {
                int e = scanner.nextInt();
                if (e % 2 == 0) ++evenCount;
                else ++oddCount;
            }
            if (oddCount % 2 == 0)
                    ans[i] = (int) (Math.pow(2, evenCount) * Math.pow(2, oddCount == 0 ? 0 : oddCount - 1) % 1000000007);
                else ans[i] = 0;
        }
        scanner.close();
        for (int e : ans) System.out.println(e);
    }
}


 

近日总结:背过的东西直接就忘记了...... 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾喔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值