Codeforces Round #618 (Div. 2)
A
题意:
数组和and积为不能为0
思路:
不能出现0,以及和不能是0
所有最后就是零的个数,如果零的个数+数组和==0的情况需要再加一
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define il inline 5 #define it register int 6 #define inf 0x3f3f3f3f 7 #define lowbit(x) (x)&(-x) 8 #define mem(a,b) memset(a,b,sizeof(a)) 9 #define mod 1000000007 10 const int maxn=1510; 11 int n,m,t; 12 int main(){ 13 scanf("%d",&t); 14 while(t--){ 15 int sum=0,l=0; 16 scanf("%d",&n); 17 for(it i=0;i<n;i++){ 18 scanf("%d",&m); 19 sum+=m; 20 if(m==0){ 21 l++; 22 } 23 } 24 if(sum+l==0){ 25 l++; 26 } 27 printf("%d ",l); 28 } 29 return 0; 30 }
B
题意:
给一个2*n的数组,分成两组,寻找中间值的最小的绝对值
思路:
就是abs(a[n/2]+a[n/2-1])的值
这里是失智的开始,re了一发
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define il inline 5 #define it register int 6 #define inf 0x3f3f3f3f 7 #define lowbit(x) (x)&(-x) 8 #define mem(a,b) memset(a,b,sizeof(a)) 9 #define mod 1000000007 10 const int maxn=2e5+10; 11 int n,m,t,a[maxn]; 12 int main(){ 13 scanf("%d",&t); 14 while(t--){ 15 scanf("%d",&n); 16 n*=2; 17 for(it i=0;i<n;i++){ 18 scanf("%d",&a[i]); 19 } 20 sort(a,a+n); 21 printf("%d ",abs(a[n/2]-a[n/2-1])); 22 } 23 return 0; 24 }