牛客小白月赛81(A~D)

155 阅读2分钟

A 小辰打比赛

解题思路

白给的题,输入后升序排序再遍历,如果a[i]<x就把他们累加,否则退出循环即可。

AC代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,x,a[1000];
    cin>>n>>x;
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a,a+n);
    int sum = 0;
    for(int i=0;i<n;i++)
    {
        if(a[i]<x) sum += a[i];
        else break;
    }
    cout<<sum;
    return 0;
}

B 小辰的圣剑

解题思路

直接两层循环(双指针也可以)遍历,我们统计枚举的每一段的声望和、消耗的耐久的和如果分别超出u和m,break就好。每次枚举都要更新一下区间长度。

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N = 5500;
typedef long long LL;
LL s1[N],s2[N],a[N],b[N];
int main()
{
    LL n,m,u;
    cin>>n>>m>>u;
    
    int maxv = 0;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=n;i++)
    {
        LL s1=0,s2=0;
        for(int j=i;j<=n;j++)
        {
            s1 += a[j], s2 +=b[j];
            if(s1 > m  ) break;
            if(s2 > u  ) break;
            maxv = max(maxv,j-i+1);
        }
    }

    cout<<maxv<<endl;
    return 0;
}

C 陶陶学算术

解题思路

这么大的数直接乘除肯定会越界,我们可以把所有的除都转换为乘法,把答案ans1和自己算的数ans2的乘法都乘到自己身上,除的部分都变成乘积乘到对方身上,请看下图。我们比较ans1是否等于ans2直接比较A*DB*C即可。

微信图片_20231118163951.jpg

AC代码

#include<bits/stdc++.h>

using namespace std;
const int N = 1e9+9;
typedef int long long;
int n;

signed main()
{

    cin>>n;
    int op,x;
    long long ans1 = 1,ans2 = 1;
    while(n--)
    {
        cin>>op>>x;
        if(op==1) ans1 = ans1 * x % N;
        else ans2 = ans2 * x % N;
    }
    cin>>n;
    while(n--)
    {
        cin>>op>>x;
        if(op==1) ans2 = ans2 * x % N;
        else ans1 = ans1 * x % N;
    }
    if(ans1==ans2) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}

D 小辰的借钱计划

解题思路

首先期望=ViPi期望=V_i * P_i
不交换的话,期望就为1*a=a,交换的话,那就是每个符合条件的数乘以他们出现的次数求和。 符合条件a%i==0 || i%a==0。最后比较两个的期望,还可以转化一下,把交换的概率放到a的一端,即a*cnt

AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    int m,a;
    while(t--)
    {
        cin>>m>>a;
        int sum = 0, cnt = 0;
        for(int i=1;i<=m-a;i++)
        {
            if(a%i==0 || i%a==0)
            {
                cnt++;
                sum += i;
            }
        }
        if(a*cnt<sum) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}