2026牛客寒假算法基础集训营2
比赛链接
A. 比赛安排
题目简介:
三种不同的比赛分别有 ,
,
场次,如何分配比赛顺序使得对于任意连续的
场比赛的类型互不相同。若可以安排,输出
,否则输出
。
思路:
三种比赛依次进行,若任意两场比赛之间场次的差 2,则证明无法按照题意安排比赛。
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int a,b,c;
cin>>a>>b>>c;
int t1=abs(a-b),t2=abs(b-c),t3=abs(a-c);
if(t1>1||t2>1||t3>1) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
int main()
{
int T;cin>>T;
while(T--) {
solve();
}
return 0;
}
B. NCPC
题目简介:
给出 个正整数
,任意选择
进行比较,若
,则数值小的淘汰,否则,两个都淘汰,知道只剩下最后一位。
求是否存在一种对决安排,使得选手 ,最终成为唯一剩下的选手(即获得最终胜利)。若存在,输出
,否则输出
。
思路:
若最大的数字出现的次数是奇数个时,那么除了最大的数字以外的其他任意数字如论如何都无法成为唯一剩下的数字。 若最大的数字出现的次数是偶数个时,可以通过最大的数字两两互相对决,使得其他任意数字成为最后的数字。
#include<bits/stdc++.h>
#define N 200010
using namespace std;
void solve()
{
int n,m=0,cnt=0;
int a[N];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(m<a[i])
{
m=a[i];
cnt=1;
}
else if(m==a[i])
cnt++;
}
for(int i=1;i<=n;i++)
{
if(cnt%2)
{
if(a[i]==m) cout<<1;
else cout<<0;
}
else
{
if(a[i]==m) cout<<0;
else cout<<1;
}
}
cout<<endl;
return;
}
int main()
{
int T;cin>>T;
while(T--) {
solve();
}
return 0;
}
F. x?y?n!
题目简介:
给定一个整数 ,构造两个正整数
使得
思路:
由于 ,我们只需要找到
即为所求得的答案。
因此需要满足
和
在二进制位上与
无交集,因此我们可以选定
。
这样由于 2^{31} 和 2^{31}+1 互质,所以满足
,并且这样构造让
在高
位的数一样,并且
在低
位的为
,
在低
位的为
。
最终异或结果即为
。
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int n;
cin>>n;
int x=n*(1LL<<31);
int y=n*((1LL<<31)+1);
cout<<x<<' '<<y<<endl;
return;
}
signed main()
{
int T;cin>>T;
while(T--) {
solve();
}
return 0;
}