寒训记录2021-01-28

博客探讨了在编程竞赛中的解题策略,特别是针对vj简单暴力专题中的 BowWowandtheTimetable 和 cf1204A 题目。文章通过转化二进制的方法解释了如何解决这类问题,并提供了代码示例。此外,还分析了ZeroArray (cf1201B) 的解题思路,指出在数组元素间进行操作使其全部变为0的条件。总结了当数组和为偶数时,通过特定操作可能达到目标的策略。
摘要由CSDN通过智能技术生成

寒训记录2 2021-1-29
继续记录不会写的/学到新东西的题
题目链接
vj简单暴力专题
BowWow and the Timetable
cf 1204A
转化二进制的做法,会tle,这个题是直接用二进制计算。
因为111111<1000000
因为发车时间是4^n(n为整数),转化为二进制就是
1,100,10000,1000000…
把二进制中除了第一位还有位数为1的直接进位
最后通过比较二进制位数与转化成了二进制的发车时间的位数

char a[107];
int main()
{
    scanf("%s",a);
    int n=(int)strlen(a);
    int cnt1=0;
    for(int i=0;i<n;i++){
        if(a[i]=='1'){
            cnt1++;
        }
        if(cnt1==2){
            break;
        }
    }//判断是否要进一位
    int dig=n;
    if(cnt1<2){
        dig--;
    }
    int ans;
    if(dig%2==0){
        ans=dig/2;
    }
    else{
        ans=dig/2+1;
    }
    cout<<ans<<endl;
}

——————————
——————————
Zero Array
cf 1201B
基本题意:给出一个数组,每次取不同的两个元素各自-1,问该数组通过上述操作可否全部减为0;

举几个帮助我理解思路的样例
2
2 1e9
这组数据总和为偶数,但是显然答案为NO,因为1e9>1

5
2 2 2 2 2
YES

3
8 14 16
YES

首先,当数列和为奇数时,显然为NO
那么只考虑数列和为偶数的情况:
分析问题,要尽量先让最大的数字减为0,之后再考虑剩下的数字。
把每个数字具象化,想象成一堆球。每次减一就是拿走一个球。
每一次都拿一个来自最大值的球,以及剩余的随机一个;当最大的一堆球被取完的时候,相当于整个数列的sum减少了2*max,依旧为偶数;而通过特定取法,可以让剩下的偶数个球分布在合理的位置让其全部被取完。

所以,最终只要sum-max>=max,就可以输出YES

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaaaterinaX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值