签到四题~~~
A.Luntik and Concerts题目大意:给定三个整数 a , b , c a,b,c a,b,c,分别表示现在拥有的数字 1 , 2 , 3 1,2,3 1,2,3的个数,至少拥有一个。要求将这堆数字分成两部分,求两部分差值的最小值。
思路分析:首先我们需要明确:由于三个数字至少有一个。那么这些数字一定能够组成 [ 1 , s u m ] [1, sum] [1,sum]之间的全部数字。由于要使插值最小,那么我们需要让两个部分的和尽可能地接近。显然对于 s u m sum sum为偶数的情况下,一定可以组成 s u m 2 \frac {sum}{2} 2sum,此时差值为 0 0 0;对于 s u m sum sum为奇数的情况下,同理可知最小差值为 1 1 1。
#include
#define int long long
using namespace std;
inline void solve(){
int a, b, c; cin >> a >> b >> c;
int sum = a + b * 2 + c * 3;
if(sum % 2) puts("1");
else puts("0");
}
signed main(){
int t = 0; cin >> t;
while(t--) solve();
}
B.Luntik and Subsequences
题目分析:给定一个序列,设序列和为 s u m sum sum,要求找出等于 s u m − 1 sum - 1 sum−1子序列个数。
思路分析:我们不从子序列的构造方式考虑,而是从总序列删除元素的角度去考虑:设现在序列中有 c n t 0 cnt_0 cnt0个 0 0 0, c n t 1 cnt_1 cnt1个 1 1 1。
- 删除 0 0 0,对序列和无影响,因此 0 0 0任意删,方案总共 2 c n t 0 2^{cnt_0} 2cnt0种;
- 删除 1 1 1,每次必须删一个且最多删除一个,方案总共 C c n t 1 1 C_{cnt_1}^{1} Ccnt11种。
那么总方案个数就是 C c n t 1 1 × 2 c n t 0 C_{cnt_1}^{1} \times 2^{cnt_0} Ccnt11×2cnt0种。
#include
#define int long long
using namespace std;
inline void solve(){
int n = 0, cnt0 = 0, cnt1 = 0; cin >> n;
for(int i = 1; i > num;
if(num == 1) cnt1++;
else if(num == 0) cnt0++;
}
int ans = cnt1 * (1ll a[i];
if(n & 1){
if(a[1] + a[2] != 0) cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?