A Be Positive
这道题就是让我们统计并输出让数组a里所有元素乘积变为正的最小次数,首先,数组中的不能有0,所以先让0变为1,cnt++,然后统计-1的个数(k),如果k为偶数,则直接输出cnt,k为奇数,则cnt+2(加一次就够了,负数的个数为偶数时乘积依旧为正数)
#include<bits/stdc++.h>
using namespace std;
const int N=9;
int a[N];
int n;
int main(){
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
int cnt=0;
int k=0;
int f=0;
for(int i=0;i<n;i++){
if(a[i]==0){
a[i]+=1;
cnt++;
}
if(a[i]<0){
k++;
f=i;
}
}
if(k%2!=0){
a[f]+=2;
cnt+=2;
}
cout<<cnt<<endl;
}
}
B Unconventional Pairs
将数组中的元素排序之后,求相邻两数之差的最大值
#include<bits/stdc++.h>
using namespace std;
int n;
int t;
int main(){
cin>>t;
while(t--){
cin>>n;
vector<int> q,p;
for(int i=0;i<n;i++){
int x;
cin>>x;
q.push_back(x);
}
sort(q.begin(),q.end());
int maxn=0;
for(int i=0;i<n;i+=2){
maxn=max(maxn,q[i+1]-q[i]);
}
cout<<maxn<<endl;
}
}
C MEX rose
题中需求的MEX是数组中最小的非负整数且不在数组中出现
MEX 的满足条件:
1、所有小于 k 的非负整数(0, 1, …, k-1)必须都在数组中出现(否则 MEX 会小于 k)。
2、整数 k 不能在数组中出现(否则 MEX 会大于 k)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t = 0;
cin >> t;
while (t--)
{
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
set<int> b;//存储数组中所有小于 k 的不同元素
int kcnt = 0;//数组中 k 出现的次数
for (int x : a) {
if (x < k) {
b.insert(x);
}
if (x == k) {
kcnt++;
}
}
int p = k - b.size();//数组里缺少的小于 k 的数的个数。
int ans = max(p, kcnt);//统计 缺少的小于 k 的元素数量和需要删除的k的数量,取两者最大值作为结果
cout << ans << "\n";
}
return 0;
}
1141

被折叠的 条评论
为什么被折叠?



