目录
A. LRC and VIP
题目:
代码:
无注释版:
#include<bits/stdc++.h>
using namespace std;
int a[110];
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int x=a[1];
for(int i=2;i<=n;i++){
x=__gcd(x,a[i]);
}
int p=0,f=0;
for(int i=1;i<=n;i++){
if(a[i]!=x){
p=i;
f=1;
break;
}
}
if(f==0){
cout<<"NO\n";
}
else{
cout<<"YES\n";
for(int i=1;i<=n;i++){
if(i==p){
cout<<"2 ";
}
else cout<<"1 ";
}
cout<<"\n";
}
}
}
有注释版:
#include<bits/stdc++.h> // 引入C++标准库头文件,包含常用的功能,比如输入输出、算法等
using namespace std;
int a[110]; // 定义一个大小为110的数组a,用来存储每个测试用例中的元素
int main() {
int t; // 定义变量t来存储测试用例的数量
cin >> t; // 输入测试用例的数量
// 对每个测试用例进行处理
while(t--) {
int n; // 定义n,用来存储当前测试用例中数组a的大小
cin >> n; // 输入n
// 输入数组a的n个元素
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
// 计算数组a所有元素的最大公约数(GCD)
int x = a[1]; // 初始时x取数组的第一个元素
for(int i = 2; i <= n; i++) {
x = __gcd(x, a[i]); // 计算当前x与a[i]的GCD
}
int p = 0, f = 0; // 定义变量p和f,p用于记录找到第一个不等于x的元素的索引,f用于标记是否找到该元素
// 遍历数组,找到第一个不等于x的元素
for(int i = 1; i <= n; i++) {
if(a[i] != x) { // 如果当前元素不等于x
p = i; // 将该元素的索引赋给p
f = 1; // 设置f为1,表示找到了不等于x的元素
break; // 找到第一个不等于x的元素后,退出循环
}
}
// 如果没有找到不等于x的元素
if(f == 0) {
cout << "NO\n"; // 如果所有元素的GCD相同,输出"NO"
} else {
cout << "YES\n"; // 如果找到了不同的GCD,输出"YES"
// 输出一个序列,表示如何分组
// 将第p个元素单独分组为序列B,其余的分配到序列C
for(int i = 1; i <= n; i++) {
if(i == p) {
cout << "2 "; // 第p个元素归为序列C,输出2
} else {
cout << "1 "; // 其余元素归为序列B,输出1
}
}
cout << "\n"; // 输出换行
}
}
}
B. Apples in Boxes
题目:
代码:
无注释版:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200010];
signed main(){
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
int s=0;
map<int,int> mp;
mp.clear();
for(int i=1;i<=n;i++){
cin>>a[i];
s+=a[i];
mp[a[i]]++;
}
sort(a+1,a+n+1);
if(a[n]-1-a[1]>k){
cout<<"Jerry\n";
continue;
}
if(a[n]-1-a[1]==k){
if(mp[a[n]]>1){
cout<<"Jerry\n";
continue;
}
}
if(s%2==0){
cout<<"Jerry\n";
}
else cout<<"Tom\n";
}
}
有注释版:
#include<bits/stdc++.h> // 引入所有标准库,方便使用各种容器和算法
using namespace std; // 使用标准命名空间
#define int long long // 定义int为long long,避免溢出
int a[200010]; // 声明一个数组a,最大大小为200010,用来存储每个盒子里的苹果数量
signed main() { // 主函数
int t; // t是测试用例的数量
cin >> t; // 输入测试用例的数量
while (t--) { // 遍历每个测试用例
int n, k; // n是盒子数量,k是限制条件中的最大差值
cin >> n >> k; // 输入n和k
int s = 0; // s用来计算苹果的总数
map<int, int> mp; // 使用map记录每种苹果数量出现的次数,mp[a[i]]表示苹果数量为a[i]的盒子数目
mp.clear(); // 清空map
for (int i = 1; i <= n; i++) { // 遍历每个盒子
cin >> a[i]; // 输入每个盒子中的苹果数量
s += a[i]; // 累加总苹果数
mp[a[i]]++; // 记录当前苹果数量出现的次数
}
sort(a + 1, a + n + 1); // 对数组a进行排序,从小到大
// 如果最大值减去最小值大于k,游戏结束,Jerry胜
if (a[n] - 1 - a[1] > k) {
cout << "Jerry\n"; // Jerry获胜
continue; // 跳出当前测试用例
}
// 如果最大值减去最小值恰好等于k,并且最大值的数量超过1,游戏结束,Jerry胜
if (a[n] - 1 - a[1] == k) {
if (mp[a[n]] > 1) { // 如果最大值出现超过一次
cout << "Jerry\n"; // Jerry获胜
continue; // 跳出当前测试用例
}
}
// 如果苹果总数为偶数,Jerry胜,否则Tom胜
if (s % 2 == 0) {
cout << "Jerry\n"; // 如果总数是偶数,Jerry胜
} else {
cout << "Tom\n"; // 如果总数是奇数,Tom胜
}
}
}