题解
2024-12-02 20:14:52
发布于:上海
29阅读
0回复
0点赞
题意
给出正整数数组 , 问是否存与 长度相等且各项皆为正整数的数组 使得 的各项元素之和等于 的各项元素之和且 数组的每组对应项不同。
解析
记 数组的第 项分别为 ,又记 数组的各项之和为 ,根据题意, 且
我们遍历 的每一项以对 估计下界。若 ,则 可取到 ;而当 时,根据 ,可得 ,于是 , 因此若记 数组中有 个 和 个非 元素,则:
因此我们只要计算出 和 即可判断 是否存在.
复杂度分析
对每个测试点,只需要遍历一次 数组,因此复杂度为
代码
#include<bits/stdc++.h>
using namespace std;
int sum, t, n, num, mininum = 0;
int main(){
cin >> t;
for(int t1 = 1; t1 <= t; t1 ++){
cin >> n;
num = 0;
sum = 0;//这个变量表示S_A
mininum = 0;//这个变量表示S_A的下界,即2p + q
for(int i = 1; i <= n; i ++){
cin >> num;
sum += num;
if(num == 1) mininum += 2;
else mininum += 1;
}
if(mininum <= sum) cout << "^_^" << endl;
else cout << ":-(" << endl;
}
}
这里空空如也
有帮助,赞一个