杭电趣味赛第四场

第一题 签到题

题目:
这是一个剑与魔法的游戏世界,世界中的玩家们有着属于他们的等级系统。但和那些平常的游戏等级系统有所不同的是,在这个世界中,相邻两个等级之间所需要的经验是相同的,不会随着等级的升高而变化。这个世界中每年都会有一天叫做众生平等日,在这一天创世神将设定一个等级k,让所有玩家的等级变为k,让所有人都在这一天体验平等的感觉。改变等级有两种方式,第一种方式是将一个玩家的经验转移到另一个玩家身上,即使得玩家改变相同的级数;第二种方式是抽出自己的经验给玩家或者直接让玩家的经验消失,众所周知,创世神有无穷多的经验。今年的众生平等日就快要到了,创世神想知道如果他想让n个玩家都变为k级,最少需要从他自己身上抽出多少级的经验值。
input:
第一行有两个整数n和k,其中n代表游戏中的玩家人数,k代表创世神想让玩家变为的等级数。
第二行有n个整数,分别代表n个玩家的等级,这些整数均为非负整数且不大于10000。
output:
输出一个整数,即创世神最少需要从自己身上抽出的等级数。
0<n≤1000
0≤k≤200000≤k≤20000
sample:
input:
3 3
1 2 3
output:
3

#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
    int n,k,i,a;
    long long sum=0,ans=0;//sum为所有低级玩家达到k级所需的总等级数,ans是高级玩家可以分出来的总等级数
    scanf("%d%d",&n,&k);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a);
        if(a - k > 0)
            ans += a - k;
        else
            sum += k - a;
    }
    if(sum - ans > 0)//如果高级玩家可以分出来的总级数都不够给低级玩家,这时候创世神才需要抽等级出来
        printf("%lld",sum - ans);
    else
        printf("0");//否则,创世神是不用抽自己的等级出来的啦
}

签到必wa定律,第一次是没有认真读题…没有减去其他玩家分出来的级数,然后马上加了一个ans,算出高级玩家可以抽出来的总级数,第二次是没有考虑到有可能高级玩家分出来的级数够填给低级玩家呀,这样创世神就不用抽自己的等级出来了,那么输出应该为0。

第二题 脑筋急转弯

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <cstdio>
using namespace std;
int main()
{
    int n,l,v0,h,v,i;
    double mintime,maxtime,t;
    scanf("%d%d%d",&n,&l,&v0);
    for(i=0; i<n; i++)
    {
        scanf("%d%d",&h,&v);
        t = (1.0 * l - h) / (v0 + v);
        if(i == 0 || t < mintime)
            mintime = t;
        if(i == 0 || t > maxtime)
            maxtime = t;
    }
    printf("%.2lf %.2lf",mintime,maxtime);
}

一开始一点思路都没有,觉得应该要把气球按零时刻所处高度和速度排序,然后算一下低位置的气球能不能追上高位置的气球,然后就觉得爆炸了。。。这没法做啊。后来傅老大说,你想啊,就算当后面的气球追上了前面的气球,那么后面的那个气球会按照前面的气球的速度继续飞,其实不就相当于之前在前面的气球一直在飞么,只不过后面的那段路程别人来替它飞了,所以最大时间和最小时间是不会变的呀,只要求出每一个气球忽略碰撞时到达顶端所需的时间,然后找出最大时间,最小时间就好了呀。好家伙后来还是wa了,到底是为什么呢,一个小时前终于知道,原来我忘记加上v0了啊!!!我敲!!

第三题 组合数学 and 二进制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <cstdio>
using namespace std;
int main()
{
    int n,k,sum;
    scanf("%d%d",&n,&k);
    sum = (k-1) * n;
    while(sum--)
    {
        printf("1");
    }
}

美丽度为k ^ 0 ,k ^ 1,k ^ 2……k ^ k-1的衣服共有n*(k-1)件,那么就是从这n*(k-1)件衣服中任选1件,选2件……选n*(k-1)件,又因为有公式在这里插入图片描述
又因为奥本海姆不会不穿衣服,所以组合总数为2 ^ n*(k-1) - 1,那真是太妙了,因为2 ^ n*(k-1) - 1的二进制形式就是n*(k-1)啊!!那么这时候把组合总数乘以n就是所以搭配方案之和就等于n*(k-1),那么输出这么多个1就完事了啊。

猜你喜欢

转载自blog.csdn.net/weixin_43678350/article/details/84729099