题目描述

\mathcal{tomoo}tomoo决定与\mathcal{CYJian}CYJian进行决斗!

已知\mathcal{tomoo}tomoo有\mathcal{N}N张扑克牌,每张扑克牌有一个\mathcal{RP}RP值\mathcal{A_i}Ai​,\mathcal{CYJian}CYJian有\mathcal{M}M张扑克牌,每张扑克牌有一个\mathcal{RP}RP值\mathcal{B_i}Bi​。

\mathcal{CYJian}CYJian与\mathcal{tomoo}tomoo将会各自从他们的牌里任意取一段连续区间的牌决斗,谁的区间内的牌的\mathcal{RP}RP值的和更大,谁就赢了,请你帮忙求出\mathcal{tomoo}tomoo赢的概率。

输入输出格式

输入格式:

  • 第一行22个正整数\mathcal{N,M}N,M
  • 第二行NN个正整数\mathcal{A_i}Ai​
  • 第三行MM个正整数\mathcal{B_i}Bi​

输出格式:

一个数表示\mathcal{tomoo}tomoo获胜的概率,如果答案可以表示成\frac{P}{Q}QP​的形式,则输出\frac{P}{Q}\%998244353QP​%998244353(不懂的左转P3811

输入输出样例

输入样例#1: 复制

5 5
1 2 3 4 5
1 3 5 7 9
输出样例#1: 复制

754229067
输入样例#2: 复制

10 15
7 8 5 1 2 3 6 5 4 1
52 10 5 6 3 2 1 4 5 8 7 4 5 6 3
输出样例#2: 复制

181952721
输入样例#3: 复制

1 1
5
5
输出样例#3: 复制

0
输入样例#4: 复制

5 5
1254125 36521421 25362142 12514221 25362142
857412252 36322411 2236232 1254112 36224125
输出样例#4: 复制

261761853
输入样例#5: 复制

2 2
2 4
2 5
输出样例#5: 复制

332748118

说明

样例解释

  • 样例33:不管怎么抽都是平均,胜率为00
  • 样例55:共有99种方案,其中33次tomoo会赢,胜率为1/31/3

数据范围

  • 对于20\%20%的数据,0<N,M\le500<N,M≤50
  • 对于另外20\%20%的数据,\sum_{i=1}^NA_i\le10^6,\sum_{j=1}^MB_j\le10^6∑i=1N​Ai​≤106,∑j=1M​Bj​≤106
  • 对于100\%100%的数据,0<N,M\le2000,0<A_i,B_i\le10^90<N,M≤2000,0<Ai​,Bi​≤109

做法:

由于最多只有20002000个数,我们可以算出一个长度为N的数列,它共有(N+1)N/2个区间,也就是说最多只会有2001000个区间和,所以我们对于每一个数列,用一个数组将每一个区间和储存下来就好了。

然后将两个数组排序(其实排一个数组就行了),再枚举其中的一个数组,同时用尺取来统计答案。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 4007
#define LL long long
#define mo 998244353
using namespace std;
int n,m,tot1,tot2,a[N],b[N],sum;
LL qa[N],qb[N];
LL suma[N*N],sumb[N*N]; LL ksm(LL a,LL b){
LL q=,base=a;
while(b){
if(b&) q*=base,q%=mo;
base*=base;
base%=mo;
b>>=;
}
return q;
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]),qa[i]=qa[i-]+a[i];
for(int i=;i<=m;i++) scanf("%d",&b[i]),qb[i]=qb[i-]+b[i];
for(int i=;i<=n;i++){
for(int j=i;j<=n;j++)
suma[++tot1]=qa[j]-qa[i-];
}
for(int i=;i<=m;i++){
for(int j=i;j<=m;j++)
sumb[++tot2]=qb[j]-qb[i-];
}
sort(suma+,suma+tot1+);
sort(sumb+,sumb+tot2+);
int j=;
for(int i=;i<=tot1;i++){
while(suma[i]>sumb[j+]&&j+<=tot2) j++;
sum+=j;
if (sum>mo) sum-=mo;
}
LL g=n*(n+)/;
g=g*m%mo*(m+)%mo;
g=g*ksm(,mo-)%mo;
printf("%lld",sum*ksm(g,mo-)%mo);
}

洛谷 U45568 赌神:决斗的更多相关文章

  1. 洛谷 P2300 合并神犇

    洛谷 听说这题可以\(n^2\)水过去,不过这里介绍一种\(O(n)\)的做法. \(f[i]\)为第\(1-i\)位合并的次数. \(pre[i]\)为第\(1-i\)位最末尾的数. \(j\)为满 ...

  2. 洛谷 P2300 合并神犇 解题报告

    P2300 合并神犇 题目背景 loidc来到了NOI的赛场上,他在那里看到了好多神犇. 题目描述 神犇们现在正排成一排在刷题.每个神犇都有一个能力值p[i].loidc认为坐在附近的金牌爷能力参差不 ...

  3. 2018.07.22 洛谷P3106 GPS的决斗Dueling GPS's(最短路)

    传送门 图论模拟题. 这题直接写3个(可以压成一个)spfa" role="presentation" style="position: relative;&q ...

  4. 洛谷P2300 合并神犇

    传送门啦 分析: 刚开始读完题后感觉很懵,怎么算都不是3,结果发现题目理解错了.题目要求的是求一个不降的序列,不是递减的(发现自己好傻) 看明白题就好做了吧.经典的区间dp题,合并果子大家应该都做过, ...

  5. 烦神的斐波那契&&洛谷-1306-斐波那契公约数

    传送门 洛谷1306传送门 -------------------------------------------------------------------------------------- ...

  6. 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)

    To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的 ...

  7. [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)

    [NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...

  8. Tarjan+LCA【洛谷P2783】 有机化学之神偶尔会做作弊

    [洛谷P2783] 有机化学之神偶尔会做作弊 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. ...

  9. 洛谷 P4240 - 毒瘤之神的考验(数论+复杂度平衡)

    洛谷题面传送门 先扯些别的. 2021 年 7 月的某一天,我和 ycx 对话: tzc:你做过哪些名字里带"毒瘤"的题目,我做过一道名副其实的毒瘤题就叫毒瘤,是个虚树+dp yc ...

随机推荐

  1. Regular Expression 正则表达式

    1. "^"表示以什么字符开始,"$"表示以什么字符结束: 2. \w表示字符类,包括大小写字母和数字: 3. “+”表示一个或多个,"*" ...

  2. 上传文件到Maven仓库

    1.上传jar到本地仓库 mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversi ...

  3. solidity语言7

    单位和全局变量 Ether Units: wei, finney, szabo, ether Time Units: 1 == 1 seconds 1 minutes == 60 seconds 1 ...

  4. 学习笔记-java 集合

    背景: 看的是<java核心技术 第8版>,覆盖jdk1.6.主要是对集合全局和细节进行全面掌握,较深入的理解集合.本人对java比较熟悉,但是对于细节的理解不深,知识点还不全,这是知识的 ...

  5. python+requests+json 接口测试思路示例

    实际项目中用python脚本实现接口测试的步骤: 1 发送请求,获取响应  >>2 提取响应里的数据,对数据进行必要的处理  >>3 断言响应数据是否与预期一致 以豆瓣接口为例 ...

  6. SSD 从形式到实质之改变

    SSD 从形式到实质之改变  作者:廖恒          SSD的物理尺寸之混战正在进行其中. 数据中心的硬件架构师由于要规划下一代server的机械设计.还要制定JBOD的设计规范,想必面临不少困 ...

  7. Java+maven+selenium3+testng 自动化测试环境IDEA

    idea .java环境变量jdk maven安装及环境变量配置这里就不多说了,网上有很多教程 这里我们只检测一下java.maven环境是否安装成功 win+R,运行cmd命令行:mvn -v   ...

  8. Android学习笔记_60_Android常用ADB命令

    第一部分: 1. ubuntu下配置环境anroid变量: 在终端执行 sudo gedit /etc/profile 打开文本编辑器,在最后追加#set android environment 2. ...

  9. SQL数据完整性

    1.数据的完整性 1. 什么是数据的完整性 保证用户输入的数据保存到数据库中是正确的 2.添加数据完整性 在创建表的时候给表添加约束 3.完整性分类 实体完整性.域完整性.引用完整性 ​ ​ 2.完整 ...

  10. java和c通信相关的数据类型转换

    利用socket进行网络传输的时候往往需要将int转换为bytes,将string转换为bytes以及一些其他类型的数据转换 java和c类型的区别: 变量类型 C中字节数 Java中字节数 int ...