A
贪心考虑
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int mx=0,mn=1e8;
void solve()
{
int n;
cin>>n;
mx=0,mn=1e8;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
mx=max(mx,x);
mn=min(mn,x);
}
cout<<(n-1)*(mx-mn)<<endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solve();
return 0;
}
B
根据性质g(t)显然大于f(t)所以我们要保证1的数量尽可能少,0数量尽可能多
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int x;
cin>>x;
cout<<1;
for(int i=1;i<x;i++)
cout<<0;
cout<<endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
solve();
return 0;
}
C
对于alice会使用或操作创造更多一,bob会使用与操作以便创造更多零
首先考虑边界情况左右边界为1时先手必胜,当有两个一连续为边界情况,一个1时alice无法获胜,两个一为最少获胜条件
#include<bits/stdc++.h>
using namespace std;
void solve()
{
string s;
int n;
cin>>n>>s;
if(s[0]=='1'||s[n-1]=='1')
{
cout<<"YES";
return ;
}
for(int i=1;i<n;i++)
{
if(s[i]=='1'&&s[i+1]=='1')
{
cout<<"YES";
return ;
}
}
cout<<"NO";
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
solve();
cout<<endl;
}
return 0;
}