补提数:4题(B、D、F、H)
B.小雷的神器电脑
解析:
- 对于两个整数A和B,它们的同或结果是通过将A和B转换为二进制表示,然后对每个位进行同或运算得到的。
- 遍历列表中的所有数对,计算它们的同或结果,并找到其中的最大值。
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[500000];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
m=1<<m;
int min1=a[1]^a[2];
for(int i=2;i<=n;i++){
min1=min(min1,a[i]^a[i-1]);
}
cout<<m-min1-1;
}
D.简单的素数
解析:设计isPrime算法来判定素数,注意1和2的分界点。
#include<iostream>
#include<cstdio>
using namespace std;
int T,n;
signed main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int cnt=0;
for(int i=2;i*i<=n;i++)
if(n%i==0)cnt++;
puts(cnt?"No":"Yes");
}
return 0;
}
F.小雷的算式
解析:这道题主要是要注意如何不把“+”号读入,而只读入数字,用数组接收完数字之后记得从大到小排好序。
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,a[200001],i=0,y=0;
while(cin>>x)
{
a[i++]=x;
y+=x;
}
sort(a,a+i);
cout<<a[i-1];
for(int j=i-2;j>=0;j--)
cout<<'+'<<a[j];
cout<<endl;
cout<<y;
}
H.聪明且狡猾的恶魔
解析:对于每个测试用例,编号为1的恶魔老大应该提出的方案是将x个金币中留下(n−1)/2个金币,这样可以确保在恶魔们进行投票后,方案能够被通过执行。这样,编号为1的恶魔在不被杀死的情况下获得的金币数量最多。
#include<bits/stdc++.h>
using namespace std;
int t,x,n;
int main(){
cin>>t;
while(t--){
cin>>x>>n;
cout<<x-(n-1)/2<<endl;
}
}