牛客网小白月赛7

  • 链接:https://www.nowcoder.com/acm/contest/190/E
    来源:牛客网
     

    题目描述

    Applese有个神奇的能力,TA可以把m个硬币融合成1个硬币,是不是很厉害。现在Applese有n个硬币,TA想把这个n个硬币融合成1个,请问他能完成吗?

    输入描述:

    输入两个整数n,m(1 ≤ n, m ≤ 109)

    输出描述:

    如果Applese能完成,输出"Yes",否则输出"No"。

考虑Huffman编码时补全节点的情况:n≡1(mod m−1 )。所以只需要判断这个式子是否成立就行了。

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

int main()
{
    long long n, m;
    cin >> n >> m;
    if (m == 1)
        cout << ((n == 1) ? "Yes" : "No") << endl;
    else if (m == 2)
        cout << "Yes" << endl;
    else
    cout << ((n % (m - 1) == 1) ? "Yes" : "No") << endl;
    return 0;
}
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    if(m==n)
    {
        printf("Yes\n");return 0;
    }
    if(m==1)//一定要考虑特殊情况,m为1,n不为1,均不可能!!
    {
        printf("No\n");return 0;
    }
    while(n>=m)//把问题想的简单些,n大于等于m时要进行融合
    {
        n=n%m+n/m;//更新n即可,m不变
    }
    if(n==1) printf("Yes\n");
    else  printf("No\n");
    return 0;
}

链接:https://www.nowcoder.com/acm/contest/190/C
来源:牛客网
 

题目描述

有一天,MWH突然来了兴致,想和CSL比比谁枪法好。于是他们找来了一个瓶子,比比看谁先打中这个瓶子。 给定MWH的命中率和CSL的命中率。 两人轮流射击,MWH先手,问谁获胜的概率大?

输入描述:

输入两个整数和,表示MWH和CSL的命中率。.

输出描述:

若MWH获胜的概率大,则输出"MWH"。 若CSL获胜的概率大,则输出"CSL",否则输出"equal"。
#include <stdio.h>
int main()
{
    int a, b;
    int sub;
    scanf("%d%d", &a, &b);
    sub = a*100 - (100 - a)*b;//算出前两次的差,即可判断
     
    if(sub == 0){
        puts("equal");
    }else{
        if(sub > 0){
            puts("MWH");
        }else{
            puts("CSL");
        }
    }
    return 0;
}
  • 链接:https://www.nowcoder.com/acm/contest/190/G
    来源:牛客网
     

    题目描述

    CSL手上有n个苹果,第i个苹果的质量是wi,现在他想把这些苹果分给他的好朋友wavator和tokitsukaze。但是CSL为了不让他们打架,根据质量决定尽量地均分成两堆分给他们。现在CSL想知道到底给每个人分多少质量的苹果。

    注意:苹果不能劈开来,并且如果不能正好均分,tokitsukaze小姐姐会拿到重的那一堆。

    输入描述:

    第一行输入一个整数n(2 ≤ n ≤ 100),第二行n个整数,表示每个苹果的质量wi(1 ≤ wi ≤ 100)。

    输出描述:

    输出两个整数,分别表示wavator和tokitsukaze得到的苹果的质量。

f[i]表示是否能组成质量为i的,每次输入就转移一下就行了。

从总质量/2开始枚举(向上/向下都行),直到找到一个f[i]\neq0输出解就行。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
int a[105];
int f[10005];
int main()
{
    int n,sum=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]),sum+=a[i];
    for(int i=0;i<n;i++)
    {
        for(int j=sum/2;j>=a[i];j--)
        {
            f[j]=max(f[j],f[j-a[i]]+a[i]);
        }
    }
    printf("%d %d\n",f[sum/2],sum-f[sum/2]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/haohaoxuexilmy/article/details/82720447