牛客周赛 Round 110(2025.9.21)
文章目录
- A 小苯的数字染色
- 题意简述
- 解法思路:
- B 小苯的数组重排
- 题意简述
- 解法思路:
- 总结
前言
补题记录+题解
赛时过的题就不具体写题解了,没过的写写题解。
做题情况:
- 牛客周赛 Round 110(9.21) (A-F)
现场完成:题
赛后补题:A/B题
(是的最近没怎么做题,这个补题就写到这吧)
牛客周赛110
官方b站视频讲解
A 小苯的数字染色
题意简述
有n个白色的数字(给定n),给其染红,有两种染法,连着染2个或者连着染3个,不限染色次数,问能不能全部染红,能输出YES不能输出NO
解法思路:
按照题意可知,如果n=2x*3y(x和y为任意整数),那么就可以染红。可知只有当n=1的时候,无法被染红,所以只需要特判1就可以了
#include<bits/stdc++.h>
using namespace std;
#define int long longsigned main(){int n;cin>>n;if(n==1) cout<<"NO"<<endl;else cout<<"YES"<<endl;return 0;
}
B 小苯的数组重排
题意简述
有n个数字,存在A里面,然后把它们重排列之后,进行如下加和ans,求重排列之后的最大ans
- ans=(A[0]+A[1])+(A[1]+A[2])+(A[2]+A[3])+…(A[n-3]+A[n-2])+(A[n-2]+A[n-1])
解法思路:
重排序之后的数字中,只有第一个和最后一个数字的值加了一遍,剩下的数字都加了两遍。于是我们可以把所给的数字进行排序,把最小的俩数字加到ans里面,剩下的数字乘以2之后加进去就是答案
#include<bits/stdc++.h>
using namespace std;
#define int long longsigned main(){int T;cin>>T;while(T--){int n,ans=0;cin>>n;vector<int> A(n);for(int i=0;i<n;i++) cin>>A[i];sort(A.begin(),A.end());ans+=A[0]+A[1];for(int i=2;i<n;i++) ans+=A[i]*2;cout<<ans<<endl;}return 0;
}
总结
记录一个菜鸡的成长——如有疏漏欢迎指正