A. Two Groups
题意:给你n个数,分成两组,使得两组加和的绝对值相减最大,问最大值是多少?
分析:所有元素求和取绝对值就是最大的数。
题解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
for(cin >> t;t;t--)
{
int n;
cin >> n;
long long sum = 0;
for(int i=0;i<n;i++)
{
int a;
cin >> a;
sum += a;
}
cout << abs(sum) << endl;
}
return 0;
}
B. BAN BAN
题意:给你n个BAN字符串的组合,每次可以移动一个字符,问你移动多少次且怎么移动,是字符串中不出现BAN的子字符串。
分析:只需要把前面BAN的B和后面BAN的N对应交换即可。
题解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
for(cin >> t;t;t--)
{
int n;
cin >> n;
cout << (n+1)/2 << endl;
for(int i=0;i<(n+1)/2;i++)
{
cout << 3*i+1 << " " << 3*n-3*i << endl;
}
}
return 0;
}
C. Swap Game
题意:Alice和Bob两个从一个长度为n的数组中选数,一次选一个数,结果是第一个数a1减去1再和选到的数交换,当a1为0时,将要选择的人为输。Alice先手,问谁能赢这次游戏。
分析:每个人找自己回合可选的最小的数,谁的数小,对方就输。
题解:
#include<bits/stdc++.h>
using namespace std;
int a[200010];
int main()
{
int t;
for(cin >> t;t;t--)
{
int n;
cin >> n;
for(int i=0;i<n;i++)
cin >> a[i];
int minn = 0x7fffffff;
for(int i=1;i<n;i++)
{
minn = min(minn, a[i]);
}
if(a[0]-1 >= minn)
cout << "Alice" << endl;
else
cout << "Bob" << endl;
}
return 0;
}