洛谷 U45568 赌神:决斗
题目描述
\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)
输入输出样例
5 5
1254125 36521421 25362142 12514221 25362142
857412252 36322411 2236232 1254112 36224125
261761853
说明
样例解释
- 样例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=1NAi≤106,∑j=1MBj≤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 赌神:决斗的更多相关文章
- 洛谷 P2300 合并神犇
洛谷 听说这题可以\(n^2\)水过去,不过这里介绍一种\(O(n)\)的做法. \(f[i]\)为第\(1-i\)位合并的次数. \(pre[i]\)为第\(1-i\)位最末尾的数. \(j\)为满 ...
- 洛谷 P2300 合并神犇 解题报告
P2300 合并神犇 题目背景 loidc来到了NOI的赛场上,他在那里看到了好多神犇. 题目描述 神犇们现在正排成一排在刷题.每个神犇都有一个能力值p[i].loidc认为坐在附近的金牌爷能力参差不 ...
- 2018.07.22 洛谷P3106 GPS的决斗Dueling GPS's(最短路)
传送门 图论模拟题. 这题直接写3个(可以压成一个)spfa" role="presentation" style="position: relative;&q ...
- 洛谷P2300 合并神犇
传送门啦 分析: 刚开始读完题后感觉很懵,怎么算都不是3,结果发现题目理解错了.题目要求的是求一个不降的序列,不是递减的(发现自己好傻) 看明白题就好做了吧.经典的区间dp题,合并果子大家应该都做过, ...
- 烦神的斐波那契&&洛谷-1306-斐波那契公约数
传送门 洛谷1306传送门 -------------------------------------------------------------------------------------- ...
- 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)
To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的 ...
- [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)
[NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...
- Tarjan+LCA【洛谷P2783】 有机化学之神偶尔会做作弊
[洛谷P2783] 有机化学之神偶尔会做作弊 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. ...
- 洛谷 P4240 - 毒瘤之神的考验(数论+复杂度平衡)
洛谷题面传送门 先扯些别的. 2021 年 7 月的某一天,我和 ycx 对话: tzc:你做过哪些名字里带"毒瘤"的题目,我做过一道名副其实的毒瘤题就叫毒瘤,是个虚树+dp yc ...
随机推荐
- Highcharts - Pie Chart
1. 饼状图(Pie Chart)示例: <div id="container" style="height: 400px"></div> ...
- html 表格边框的设置
对于很多初学HTML的人来说,表格<table>是最常用的标签了,但对于表格边框的控制,很多初学者却不甚其解. 一般我们用表格的时候总会给它个border属性,比如:<table b ...
- JSP + JavaBean + Servlet实现MVC设计模式
1.流程图: 2.代码清单 数据库脚本: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `userid` ) NOT NULL, `name` ...
- 小于12px的字体大小在Chrome中不起作用
今天遇见一个小问题,让人挺郁闷的,在Chrome浏览器中无法把字体变成12px以下.网上搜索以下,发现无论中文英文数字在网页中CSS设置小于12px后各大浏览器均支持,在谷歌chrome浏览器不支持解 ...
- strtoul (将字符串转换成无符号长整型数)
strtoul strtoul (将字符串转换成无符号长整型数) 相关函数 atof,atoi,atol,strtod,strtol 表头文件 #include<stdlib.h> 定义函 ...
- ABAP正则表达式 vs SPLIT INTO
需求: 把如下通过"/"连接起来的三个字符串分别解析出来. 传统的做法见下图第98行的function module SKWF_UTIL_IO_FIND_BY_KEY: 这个fun ...
- 48. Rotate Image (matrix retation, transpose) Amazon problem
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- Android(java)学习笔记44:Map集合的遍历之键值对对象找键和值
1. Map集合的遍历之 键值对对象找 键和值: package cn.itcast_01; import java.util.HashMap; import java.util.Map; impor ...
- Codeforces Round #513
A. Phone Numbers 题意:给一些数字,每个电话号码以8开头,11位,求最多组成多少个号码,重复累加. #include <bits/stdc++.h> using names ...
- response.Close、response.End、response.Flush区别
今天在做文件下载功能用到的是response的方法,首先我们要了解这些方法的作用. 1.response.write():将信息写入http响应输出流. 2.response.Flush:向客户端发送 ...