HRBU_20211008训练

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


题目来源
A - Keanu Reeves

题意

输入一个长度为n的二进制字符,把它分为尽可能少的子串,且子串要求为1和0的个数不一样,先判断子串的1和0的个数是否相等,如果相等,直接输出该子串,如果不相等,把第一个字符输出,其余字符再输出

#代码

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int n;
    string s;
    cin>>n;
    cin>>s;
    int o=0,l=0;
    for(int i=0;i<n;i++)
    {
        if(s[i]=='0')
            o++;
        else
            l++;
    }
    if(l!=o)
    {
        cout<<"1"<<endl;
        cout<<s<<endl;
    }
    else
    {
        cout<<"2"<<endl;
        cout<<s[0]<<" ";
        for(int i=1;i<n;i++)
        {
            cout<<s[i];
        }
        cout<<endl;

    }
}

总结:
这题一开始的时候我老是去想样例三的结果是怎么来的,后来才知道只需要输出任意正确的答案即可,样例的结果只是其中之一的答案,这题只需要1和0的数量不一样即可

B - Number Circle

题意

这题是需要将一个序列组成一个圆圈,要求一个数比左右两个数的和小,输出这个序列就可,这题先用sort进行排序,判断最大的数是否小于第二大的数和第三大的数,如果是输出,交换最大的数和第二大数的位置,交换的原因是让最大的数离较大的数更近,以保证比左右之和更小,如果否,输出no;

代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,i;
    int a[100005];
    cin>>n;
    for( i=0;i<n;i++)
        cin>>a[i];
        sort(a,a+n);
    //int maxn=max(maxn,a[i]);
      if(a[n-1]<a[n-2]+a[n-3])
         {
             cout<<"YES"<<endl;
             swap(a[n-1],a[n-2]);
             for(i=0;i<n-1;i++)
              cout<<a[i]<<" ";
              cout<<a[n-1]<<endl;
         }
         else
            cout<<"NO"<<endl;


}

总结:这题如果想到了这个思路还是比较简单的,一开始我就在想怎么比较,让一个数比较左右两个数的和更小,后来,你发现排序之后,右边的数一定比左一个数大,只需要,比较最大的数是否比第二大和第三大之和小即可。

C - Candies!

题意

本题是把第一第二一组,第三第四一组,以此类推,对10取余,直到最后只剩下一个数字,判断需要几次操作,输出即可,这题用前缀和思想,每组之和其实是总的序列之和,只需要判断该序列除以10,取整输出答案

代码

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int n,q,l,r,d;
    cin>>n;
    int sum[100005];
    for(int i=1;i<=n;i++)
    {
        cin>>d;
        sum[i]=sum[i-1]+d;
    }
    cin>>q;
    while(q--)
    {
        cin>>l;
        cin>>r;
        cout<<(sum[r]-sum[l-1])/10<<endl;
    }
    return 0;
}

总结
本题其实一开始,我是想每次之和模除10之后存起来,每次遍历判断,后来发现我得开多少数组啊!寻找规律发现只需要用前缀和就好了

总结

这次训练可以说很成功,希望下次可以做到今日事今日毕,加油吧!我们一定赢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值