HRBU_20211101训练(codeforces round #752(div2))

HRBU_20211101训练

A - Era

题意

在一组数中任意插入几个数,是这组数满足a i<= i;并且下标是从1开始的,问需要插入几个数,才能满足于上述条件。

思路

求出a[i]-i的最大值,就是为了比较该数与数的下标相差多少,如果相等的话,说明该数就是数的下标的值,只需要比较出最大值即可,举例说明一下:
1 2 3 4 5;每个数的下标与数的差值均为零,可以看出a[i]==i;

1 2 3 4 6;可以看出只有数字6与数字下标5相差1,而在这里只需要补充一个5即可,即只需要补充一个数字即可。

代码

#include<stdio.h>
#include<iostream>
using namespace std;
int a[105];
int main()
{

    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,ans=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
        scanf("%d",&a[i]);
        ans=max(ans,a[i]-i);
        }
        printf("%d\n",ans);

    }
}

B - XOR Specia-LIS-t

题意

一组数列,要求分成几组使得分成的子序列均是按照升序排列,例如,2,5,3,1,4 的数列,可以分为 2 5,3,1 4,三组,再把分成的组的个数作异或操作,如果结果是零输出NO,否则输出YES。

思路

如果该数列已经是升序,就分成零个子序列,输出NO,如果是奇数也是输出NO,因为总有一个子序列为零。

代码

#include<stdio.h>
#include<iostream>
int a[100005];
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,i;
        cin>>n;
        int flag=0;
        for( i=1;i<=n;i++)
        {
        cin>>a[i];
        if(i>0)
        if(a[i]<=a[i-1])flag=1;
        }
        cout<<((n%2==0) || flag?"YES\n":"NO\n");

    }
}

C - Di-visible Confusion

题意

判断一个数是否可以被下标加一除完,a[i]%(i+1)==0,能被整除完输出NO,判断是否所有的都能被整除完,且数列中的每一个都能被整除完时,应该把这个数移除,后面的数前进一位。

思路

依次遍历看看是否每一个都能被整除,若能输出NO,不能输出YES

代码

#include<stdio.h>
#include<iostream>
using namespace std;
int a[100005];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
         scanf("%d",&n);
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            int k=0;
            while(a[i]%(i+1-k)==0 && k<=i-1)k++;
            if(k==i)flag=1;
        }
        if(flag==0)
            printf("YES\n");
        else
            printf("NO\n");

    }
}

D - Moderate Modular Mode

题意

题目意思很简单,输出一个n ,使得 (n % x)== (y % n);
问n是多少?

思路

分情况讨论:
若x>y 输出 X+Y;
若x<=y,输出y- y%x/2;

代码

#include<stdio.h>
#include<iostream>
#define ll long long
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int x,y;
        cin>>x;
        cin>>y;
        //n % x == y % n
        cout<<(x>y?y+x:y-y%x/2)<<endl;
    }
}

总结

每个人的人生都存在着起伏,在低谷时积蓄力量,在顶峰时绽放光彩!希望我能做到!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值