觉得自己失了智,家里网速太慢了,12分钟之后才卡进去,进去的时候A题过了4k个,B题过了1k个,就感觉很凉
但也不是这次失智的原因……C题因为将10^9看成了10^5之后,数组开了一个15,(应该开30的)然后wa了8发以后,重新读题之后发现了自己失智的情况。这题跟没做一样了
导致DE没有时间理解去做。
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\n",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\n",abs(a[n/2]-a[n/2-1])); 22 } 23 return 0; 24 }
C
题意:
给一个n的数组,给一个公式f(x,y)=x|y-y, 重新排列数组得到数组最后计算的最大值
思路:
x|y-y,就是y二进制里面的1,减去与之对于在x二进制里面的1,如果与之对于的是0,不用管,减完之后的x(二进制)就是f(x,y)的值
然后可以顺推过去,只要找到二进制里面最高位的唯一的1,就是数组最后计算的最大值,把 二进制里面最高位的唯一的1代表的数 放到第一位,就是答案
因为一度把x y当成0~10^5,记录二进制的数组只有15,一直wa,wa的心态炸裂,不相信自己最初的思路,然后开始一系列操作和猜测
最后快到结束了,回去瞄了一眼题,发现是10^9,同时,wa的过程也去看了D题,但问题过于长,加载半天,然后看不懂……(可能是C题一直卡着反正就很烦躁)
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=1e5+10; 11 int n,m,t,vis[30],a[maxn]; 12 int main(){ 13 scanf("%d",&n); 14 for(it i=0;i<n;i++){ 15 scanf("%d",&a[i]); 16 int kk=a[i],ci=0; 17 while(kk){ 18 if(kk%2==1){vis[ci]+=1;} 19 kk/=2;ci++; 20 } 21 } 22 int f=1,pos=0; 23 for(it i=30;i>=0;i--){ 24 if(vis[i]==1){ 25 pos=i;f=0;break; 26 } 27 } 28 //cout<<pos<<endl; 29 int k=1<<pos; 30 if(!f){ 31 for(it i=0;i<n;i++){ 32 if(a[i]&k){ 33 int tt=a[0];a[0]=a[i];a[i]=tt; 34 } 35 } 36 } 37 for(it i=0;i<n;i++){ 38 printf(i==n-1?"%d\n":"%d ",a[i]); 39 } 40 return 0; 41 }
DE待补,求别被hack,雪上加霜,这次又要掉分了
原文地址:https://www.cnblogs.com/luoyugongxi/p/12289588.html
时间: 2024-10-17 14:36:13