与dalao学校的联hu考ce(10.27)

61 篇文章 0 订阅
40 篇文章 0 订阅

前言:
开考一个半小时一直以为自己做错题了
要是noip都是这种难度,那我可以滚回去学文化课了

T2

【题目描述】
辣鸡ljh NOI之后就退役了,然后就滚去学文化课了。
他每天都被katarina大神虐,仗着自己学过一些姿势就给katarina大神出了一道题。
有一棵 n 个节点的以 1 号节点为根的树,每个节点上有一个小桶,节点u上的小桶可以容纳ki个小球,
ljh每次可以给一个节点到根路径上的所有节点的小桶内放一个小球,如果这个节点的小桶满了则不能放进这个节点,在放完所有小球之后就企图去刁难katarina大神,让katarina大神回答每个节点的小桶内的小球有多少种颜色。
然而katarina大神一眼就秒掉了,还说这就是一道傻逼模板题。
现在katarina大神想考考即将参加NOIP2017的你能不能回答上辣鸡ljh的问题。

【输入格式】
第一行,一个整数n,树上节点的数量。
接下来n − 1行,每行两个整数u, v,表示在u, v之间有一条边。
接下来一行n个整数,表示每个节点上的小桶数量。
下一行是一个整数m,表示ljh进行的操作数量。
接下来m行,每行两个整数x, c,分别表示进行操作的节点和小球颜色。
下一行是一个整数Q,表示你需要回答的询问数。
接下来Q行,每行一个整数x,表示一个询问。
【输出格式】
对于每个询问输出一行表示这个询问的答案

【样例1 输入】
5
1 2
2 3
3 4
2 5
2 1 1 1 1
2
2 1
4 2
3
1
3
5
【样例1 输出】
2
1
0
【样例2 输入】
10
3 10
2 5
3 2
2 6
1 9
8 7
7 4
3 8
3 1
15 47 23 22 9 16 45 39 21 13
10
10 7
9 3
5 1
5 2
9 4
10 9
2 4
10 1
2 6
7 9
3
1
2
3
【样例2 输出】
7
4
6

分析:
看到题解之后,我真的觉得出题人是口胡的
这里写图片描述
这里写图片描述

T3

【题目描述】
辣鸡ljh NOI之后就退役了,然后就滚去学文化课了。
他发现katarina大佬真是太强了,于是就学习了一下katarina大佬的做题方法。
比如这是一本有n道题的练习册,katarina大佬每天都会做k道题。
第一天做第1~k题,第二天做第2~k + 1题……第n − k + 1天做第n − k + 1~n道题。
但是辣鸡 ljh 又不想太累,所以他想知道katarina大佬做完这本练习册的劳累度。
每道题有它的难度值,假设今天katarina大佬做的题目中最大难度为t,那么今天katarina大佬的劳累
度就是wt୲,做完这本书的劳累值就是每天的劳累值之和。
但是辣鸡ljh一道题都不会,自然也不知道题目有多难,他只知道题目的难度一定在1~m之间随机。
他想让即将参加 NOIP 的你帮他算算katarina大佬做完这本书的劳累值期望

【输入格式】
第一行,三个整数n,m, k
第二行,m个整数表示wt
【输出格式】
输出劳累值期望对1000000007取模的值。

【样例1 输入】
2 2 2
1 2
【样例1 输出】
750000007
【样例 1 解释】
有{1,1}, {1,2}, {2,1}, {2,2}四种可能,期望为7/4

【样例 2 输入】
5 4 3
2 1 3 5
【样例2 输出】
890625018
这里写图片描述

分析:
这算是这套题中思维较高,比较有价值的一道题了
题解的做法我不是特别理解
好在ZYXZYXZYX和cyf给出很好的做法,详细说一下:

1st . %%% ZYXZYXZYX && zhhe:

题目的难度就在如何计算这个区间最大值上
既然计算起来困难,那我们就直接枚举
假设我们现在已经知道了长度为k的区间的最大值是i
我们现在要构造一个合法区间
显然,这个区间内不能出现大于i的值,所以我们直接从(1~i)中选数填满这个区间

i^k

但是这些情况中包含不含有i的情况,所以我们要减掉不包含i的情况:

正确的方案数:i^k-(i-1)^k

那么这些区间的贡献一定是W[i]

期望的简单计算公式:
所有情况的和 / 情况总数

所以我们有了下面这个式子:
这里写图片描述

这就是答案了

Q.整个序列中各个区间不是互相影响的吗,可以直接乘上区间数量吗
A. by zys学长

如果区间之间的贡献是相加的关系
如()+()+()… ,那么区间之间是互不影响
但是如果区间之间的贡献是相乘,就不能这样算了

1st . %%%cyf

当然,如果你觉得上面的那个很玄学,
那么下面说一个中规中矩的做法:
这里写图片描述

实际上两种做法是一样的

//这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
#define ll long long

using namespace std;

const ll mod=1000000007;
int W[105],n,m,k;
ll hw[500];

ll KSM(ll a,ll b)
{
    ll t=1;
    a%=mod;
    while (b)
    {
        if (b&1)
           t=(t*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return t%mod;
}

int main()
{
    scanf("%d%d%d",&n,&m,&k);
    for (int i=1;i<=m;i++) scanf("%d",&W[i]);

    for (int i=1;i<=m;i++) hw[i]=KSM(i,k);   //hw[0]=0
    ll inv=KSM(KSM(m,k),mod-2);

    ll ans=0;
    for (int i=1;i<=m;i++)
        ans=(ans+W[i]*1LL*(hw[i]-hw[i-1])%mod)%mod;

    ans=(ans*(n-k+1)%mod)%mod;
    ans=(ans*inv)%mod;
    printf("%lld\n",ans);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值