首页 > 其他分享 >CF1983E I Love Balls

CF1983E I Love Balls

时间:2024-07-15 16:41:35浏览次数:10  
标签:Balls Love Read CF1983E 小球 int ch frac 特殊

题意

\(n\) 个小球,有 \(k\) 个特殊小球,两个人轮流随机拿,每个小球有权值,如果拿到特殊球就再拿一个,问两个人的期望得分。

题解

关键1

如果没有特殊小球,那么每个球是等价的,计算期望的时候可以直接用平均值作为一个小球的权值,把每个小球的权值都看成平均值

关键2

把拿取操作看成一个序列,不管有没有特殊小球,非特殊小球一定第奇数个属于 \(A\),第偶数个属于 \(B\)。于是可以先求出非特殊小球的贡献,即 \(\lceil\frac {num}2\rceil\cdot \frac{sum}{num}\)

关键3

对于特殊小球,它的从属和下一个球一样,可以认为是非特殊小球把拿取序列分成了\(n-k+1\) 个区间,奇数区间给 \(A\),偶数区间给 \(B\)。对于特殊小球的处理也是一样的,用平均值计算。假设有 \(m\) 个区间,那么一个特殊小球分到奇数区间的概率就是 \(\frac{\lceil\frac m2\rceil}m\),所以分给 \(A\) 的小球期望个数就是再乘上 \(num\) 。


最后答案就是两个贡献加起来

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

template<typename T>
inline void Read(T &n){
    char ch; bool flag=false;
    while(!isdigit(ch=getchar()))(ch=='-')&&(flag=true);
    for(n=(ch^48);isdigit(ch=getchar());n=(n<<1)+(n<<3)+(ch^48));
    if(flag)n=-n;
}

typedef long long ll;
const int MOD = 1000000007;
const int MAXN = 400005;

inline int inc(int a, int b){a+=b;if(a>=MOD)a-=MOD;return a;}
inline int dec(int a, int b){a-=b;if(a<0)a+=MOD;return a;}
inline void iinc(int &a, int b){a=inc(a,b);}
inline void ddec(int &a, int b){a=dec(a,b);}
inline void upd(int &a, ll b){a=(a+b)%MOD;}

inline int ksm(int base, int k=MOD-2){
    int res = 1;
    while(k){
        if(k&1) res = 1ll*res*base%MOD;
        base = 1ll*base*base%MOD;
        k >>= 1;
    }
    return res;
}

int a[MAXN];

int main(){
    // freopen("1.in","r",stdin);
    int T; Read(T);
    while(T--){
        int n, k;
        Read(n); Read(k);
        for(int i=1; i<=n; i++) Read(a[i]);
        int sm1=0, sm2=0, sm=0;
        for(int i=1; i<=k; i++) iinc(sm1,a[i]);
        for(int i=k+1; i<=n; i++) iinc(sm2,a[i]);
        sm = inc(sm1,sm2);
        sm1 = 1ll*sm1*ksm(k)%MOD;
        sm2 = 1ll*sm2*ksm(n-k)%MOD;
        int res = (1ll*sm2*((n-k+1)/2)+1ll*sm1*((n-k+1+1)/2)%MOD*ksm(n-k+1)%MOD*k)%MOD;
        printf("%d %d\n",res,dec(sm,res));
    }
    return 0;
}

标签:Balls,Love,Read,CF1983E,小球,int,ch,frac,特殊
From: https://www.cnblogs.com/oisdoaiu/p/18303461

相关文章

  • [EGOI2021] Luna likes Love 的题解
    题目大意有\(2\timesn\)个人站成一排,然后给每个人分配一个\(1\)至\(n\)之间的数字,每种数字出现\(2\)次。现在,你可以进行两种操作:删除操作,将数字相同且相邻的两人删除,删除后两端剩下的队列合并。交换操作,交换相邻两个人的位置。每次,问至少操作多少次能够删除所有人......
  • CF1983E I Love Balls
    Problem-E-Codeforces爱丽丝和鲍勃玩摸球游戏。有\(n\)个球,其中\(k\)个是特殊球。每个球都有其价值。他们轮流且不放回地摸球,每回合随机摸一个球并获得该球的价值。特别地,如果摸到了特殊球(且至少还有一个球)则这名玩家继续摸球。如果摸到的是普通球,则换人摸球。这样轮流......
  • AWS JDBC Driver连接中国区的Aurora需要配置参数 enableClusterAwareFailover=false
    AWSJDBCDriver中国区和Global区域的区别是,由于中国区AuroraEndpoint与Global的后缀不同,中国区的AWSJDBCDriver其实无法识别中国区endpoint,因为中国区的资源endpoint是以".cn"结尾,这个endpoint不被认为是aurora的endpoint,会被认为是customdomain.因此应用程序在使用AW......
  • OI loves Algorithm——后缀数组
    最近NFLS周赛,F题需要后缀数组,我不会,光荣掉到20+名。打完后就去补习了相关知识,觉得很巧妙,就来写了一篇专栏1.后缀数组的定义后缀数组(SA)保存的是一个字符串所有后缀的排序结果,其中第SA[i]表示所有后缀中第$i$小的后缀的开头位置。与之相对的是名次数组Rank,Rank[i]......
  • F. Vasilije Loves Number Theory
    原题链接题解\(a,n\)互质,所以\(d(n·a)=d(a)d(n)\),即\(n\mod\d(n)==0\)是否成立。(总是能构造出一与\(n\)互质,且\(d(a)\)任意的\(a\))由于\(n\)会很大,所以我们将\(n\)质因子分解,\(n=p_1^{m_1}p_2^{m_2}...p_k^{m_k}\)这样一来\(d(n)=(m_1+1)(m_2+1)...(m_k+1......
  • [CISCN 2019 初赛]Love Math
    进入题目,直接源码代码审计、看师傅wp有黑名单字符过滤,有白名单函数过滤于是用编码绕过,利用eval函数执行命令,system('cat/flag.txt')base_convert(a,b,c)//将数值a按b进制转换为c进制dechex//将10进制转成16进制hex2bin()//16进制转成字符串base_convert(37907361743,......
  • C. Qingshan Loves Strings 2
    原题链接题解1.当10个数不一致时,无论怎样都不成立2.当01个数一致时,是否一定存在某种方法使得成立呢?3.对于长度为\(k\)的字符串\(s\),若不合法,那我在旁边添加一个01,则我们可以连续删除两边的配对数字,且至少能删除一对,且经过若干轮的删除一定能使字符串长度减小总的来说,我们......
  • 【AKS+Redis】AKS中客户端(ioredis)遇见Azure Redis服务Failover后链接中断的可能性
    问题描述在AKS中连接Redis,当遇到AzureRedis升级或者Failover时,NodeJS应用中使用ioredissdk在很长一段时间内无法恢复和AzureRedis服务端的连接,对于这种想象的可能性推断。 问题解答使用AzureCacheforRedis时,一个服务器是主节点,另一个服务器是副本。主节点通常负......
  • D. In Love
    题解首先,我们来学会如何判断在一系列线段中是否存在不相交线段。我们选取所有线段中最大的左边界l_max和最小的右边界r_min,我们可以清楚的知晓当l_max>r_min的时候存在不相交线段(贪心的思想),否则不存在。code #include<bits/stdc++.h>usingnamespacestd;typedeflonglo......
  • C. Tenzing and Balls
    链接:https://codeforces.com/problemset/problem/1842/Corhttps://www.luogu.com.cn/problem/CF1842C大概的思路就是利用dp[i]记录前i个数据最多消掉的数字个数,然后对∀j:a[i]==a[j]&&j<i进行dp[i]=dp[j-1]+i-j+1的递推优化:代码:#define_CRT_SECURE_NO_WARNI......