考场上切了,但是比较神奇的题,应该是蓝/紫

Discription

乒乓球 \(\text{ }\)时间限制:\(\bold{3}\) 秒

众所周知,一场乒乓球比赛共有两个玩家 \(A\) 和 \(B\) 参与,其中一场比赛由多局比赛组成,而每局比赛中又由多盘比赛组成。

每盘比赛 \(A\) 或 \(B\) 只有一名选手获胜。当其中一名选手在一局比赛中达到 \(X\) 盘比赛胜利时,该局比赛结束,并且该名选手被宣布为这局比赛的获胜者。

类似的,当其中一名选手在 \(Y\) 局比赛中获得胜利时,该名选手被称为该场游戏的获胜者。

你刚刚看了一场比赛,其中 \(A\) 获得了 \(P\) 盘比赛的胜利,B 获得了 \(Q\) 盘比赛的胜利,并且你知道 \(A\) 是该场比赛的获胜者,但你忘记了 \(X\) 和 \(Y\) 的具体数值。

你想知道有多少对可能的 \((X,Y)\),使得至少存在一组合法的获胜情况满足要求。

数据范围:\(0 \le P,Q \le 10^{14}\)。

Analysis

这个神奇的数据范围,加上计数,不难想到正解为整除分块,往这个方面想。

设 \(B\) 赢了 \(k\) 场,不难列出不等式组:

\[\begin{cases}
k \lt y & \textcircled{\small{1}}\\
xy \le p \le xy+k(x-1) & \textcircled{\small{2}}\\
kx \le q \le kx+y(x-1) & \textcircled{\small{3}}
\end{cases}\]

由 \(\textcircled{\small{1}}\) 和 \(\textcircled{\small{3}}\) 中 \(q\) 的下界知:

\[k \le \min(y-1,\lfloor\frac{q}{x}\rfloor)\text{ }\textcircled{\small{4}}
\]

这时候需要一点感性理解:

  1. 当 \(\textcircled{\small{4}}\) 时,\(\textcircled{\small{1}}\) 和 \(\textcircled{\small{3}}\) 中 \(q\) 的下界一定成立;
  2. 对于越大的 \(k\),\(\textcircled{\small{2}}\) 的下界不变,上界增大;
  3. \(\textcircled{\small{3}}\) 中区间长度与 \(k\) 无关,所以下界在 \(\le q\) 的前提下越大越好。

综上,\(k\) 越大越好,于是钦定:

\[k = \min(y-1,\lfloor\frac{q}{x}\rfloor)
\]

注意到此时可以调和级数 \(O(p\log p)\) 的枚举 \(x\) 和 \(y\) 同时 \(O(1)\) 检验,期望得分 \(50\) 分。


再想优化,就需要分类讨论:

$\bold{I.} $ 当 \(\lfloor\frac{q}{x}\rfloor \le y-1\) 时,

此时 \(k=\lfloor\frac{q}{x}\rfloor\)。

分析前面的不等式组:

  1. \(\textcircled{\small{1}}\) 和 \(\textcircled{\small{3}}\) 中 \(q\) 的下界一定成立;
  2. 对于 \(\textcircled{\small{3}}\) 中 \(q\) 的上界 \(kx+y(x-1)\),代入 \(k\) 得:
\[q \le \lfloor\frac{q}{x}\rfloor\cdot x+y(x-1)
\]

注意到 \(\lfloor\frac{q}{x}\rfloor\cdot x \gt q-x\),而 \(y \ge 1\) 即 \(y(x-1) \ge x-1\),于是 \(\textcircled{\small{3}}\) 恒成立。

综上,只需考虑 \(\textcircled{\small{2}}\) 和 \(\lfloor\frac{q}{x}\rfloor \le y-1\) 即 \(k\le y-1\) 的大前提即可。

\[\begin{cases}
k \le y-1\\
xy \le p \le xy+k(x-1) & \textcircled{\small{2}}\\
\end{cases}\]

考虑卡出 \(y\) 的范围,易得:

\[\max(k+1,\lceil\frac{p+k}{x}\rceil-k)\le y\le \lfloor\frac{p}{x}\rfloor
\]

改写一下向上取整:

\[\max(k+1,\lfloor\frac{p+k-1}{x}\rfloor+1-k)\le y\le \lfloor\frac{p}{x}\rfloor
\]

接着考虑怎么整除分块,比较好写的做法是:循环中先以 \(\lfloor\frac{p}{x}\rfloor\) 进行分块,算出 \(k\) 和 \(\lfloor\frac{p+k-1}{x}\rfloor\) 在对右端点 \(r\) 进行更新即可。

先放一下实现:

for(ll l=1,r;l<=p;l=r+1){
r=p/(p/l);
ll k=q/l,tmp=p+k-1;
if(k) r=min(r,q/k);
if(l<=tmp) r=min(r,tmp/(tmp/l));
ans+=(r-l+1)*max(p/l-max(k+1,tmp/l+1-k)+1,0ll);
}

$\bold{II.} $ 当 \(\lfloor\frac{q}{x}\rfloor \gt y-1\) 时,

此时 \(k=y-1\)。

类似的,分析原不等式组:

  1. \(\textcircled{\small{1}}\) 和 \(\textcircled{\small{3}}\) 中 \(q\) 的下界一定成立;
  2. 对于 \(\textcircled{\small{2}}\) 中 \(p\) 的下界 \(xy\),
\[\because \lfloor\frac{q}{x}\rfloor \gt y-1
\]
\[\therefore \lfloor\frac{q}{x}\rfloor \ge y
\]
\[\therefore \lfloor\frac{q}{x}\rfloor\cdot x \ge xy
\]
\[\therefore xy \le q
\]

于是 \(\textcircled{\small{2}}\) 中 \(p\) 的下界的限制必成立;

  1. 对于 \(\textcircled{\small{3}}\) 中 \(q\) 的下界 \(kx\),
\[\because y-1 \lt \lfloor\frac{q}{x}\rfloor\text{ }且\text{ }k=y-1
\]
\[\therefore k \lt \lfloor\frac{q}{x}\rfloor
\]
\[\therefore kx \lt \lfloor\frac{q}{x}\rfloor\cdot x
\]
\[\therefore kx \lt q
\]
\[\therefore kx \le q
\]

于是 \(\textcircled{\small{3}}\) 中 \(q\) 的下界的限制必成立;

综上,只需考虑 \(\textcircled{\small{2}}\) 和 \(\textcircled{\small{3}}\) 中的上界。

\(p.s.\) 大前提 \(\lfloor\frac{q}{x}\rfloor \gt y-1\) 在 2. 和 3. 中考虑过了,无需再考虑。

\[\begin{cases}
p \le xy+k(x-1) & \textcircled{\small{2}} & (上界)\\
q \le kx+y(x-1) & \textcircled{\small{3}} & (上界)
\end{cases}\]

将 \(k=y-1\) 代入得:

\[\begin{cases}
p \le 2xy-x-y+1 & \textcircled{\small{2}} & (上界)\\
q \le 2xy-x-y & \textcircled{\small{3}} & (上界)
\end{cases}\]

考虑卡出 \(2xy-x-y\) 的范围,易得:

\[2xy-x-y\ge \max(p-1,q)
\]

类似的,卡出 \(y\) 的范围,易得:

\[(2x-1)y\ge\max(p-1,q)+x
\]
\[\implies y \ge\lfloor\frac{x+\max(p-1,q)}{2x-1}\rfloor
\]

这个就好写很多,直接整除分块即可。

给出实现:

for(ll l=1,r;l<=min(p,q);l=r+1){
r=min(p,q)/(min(p,q)/l);
ll tmp=(max(p-1,q)+l-1)/(2*l-1));
if(tmp) r=min(r,(max(p-1,q)+tmp-1)/(2*tmp-1));
ans+=(r-l+1)*max(min(p,q)/l-tmp,0ll);
}

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll p,q,ans;
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>p>>q;
for(ll l=1,r;l<=p;l=r+1){
r=p/(p/l);
ll k=q/l,tmp=p+k-1;
if(k) r=min(r,q/k);
if(l<=tmp) r=min(r,tmp/(tmp/l));
ans+=(r-l+1)*max(p/l-max(k+1,tmp/l+1-k)+1,0ll);
}
for(ll l=1,r;l<=min(p,q);l=r+1){
r=min(p,q)/(min(p,q)/l);
ll tmp=(max(p-1,q)+l-1)/(2*l-1);
if(tmp) r=min(r,(max(p-1,q)+tmp-1)/(2*tmp-1));
ans+=(r-l+1)*max(min(p,q)/l-tmp,0ll);
}
cout<<ans<<endl;
return 0;
}

题解:GZOI2024 D2T2 乒乓球的更多相关文章

  1. 模拟、字符串--P1042 乒乓球 题解

    P1042 乒乓球 字符串string的基本使用 #include <iostream> #include <algorithm> #include <map> # ...

  2. 【题解】Luogu P5313 僕たちはひとつの光([Ynoi2012]D2T2)

    原题传送门 lovelive好评 比赛时只拿到了60pts,还是自己太菜了 这题的思想实际有点像Luogu P3674 小清新人渣的本愿与Luogu P5071 [Ynoi2015]此时此刻的光辉 这 ...

  3. 4560 NOIP2015 D2T2 子串

    4560 NOIP2015 D2T2 子串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 有两 ...

  4. HDU2094(产生冠军)题解

    HDU2094(产生冠军)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 根据给定现有比赛结果推断分析冠军.(这描述...我建议还是看题吧,题不长) [题目分析] 给出的 ...

  5. HEOI2016 题解

    HEOI2016 题解 Q:为什么要在sdoi前做去年的heoi题 A:我省选药丸 http://cogs.pro/cogs/problem/index.php?key=heoi2016 D1T1 树 ...

  6. pkuwc2018题解

    题解: 思路挺好想的..然而今天写代码写成傻逼了 d1t1: 首先比较暴力的就是$f[i][j]$表示i个这个点是j的概率 然后前缀和一下dp就是$n^2$的 部分分树形态随机就说明树深度是$log$ ...

  7. HNOI2018简要题解

    HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...

  8. BJOI2018简要题解

    BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...

  9. CQOI2018简要题解

    CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...

  10. NOIP2017 题解

    QAQ--由于没报上名并没能亲自去,自己切一切题聊以慰藉吧-- 可能等到省选的时候我就没有能力再不看题解自己切省选题了--辣鸡HZ毁我青春 D1T1 小凯的疑惑 地球人都会做,懒得写题解了-- D1T ...

随机推荐

  1. 《Python数据可视化之matplotlib实践》 源码 第四篇 扩展 第十一章

    图  11.2  import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np plt.axes([0.1, ...

  2. 【转载】 Do's and Don'ts of using t-SNE to Understand Vision Models —— t-SNE 作者写的使用指南(PPT版本)

    <Do's and Don'ts of using t-SNE to Understand Vision Models> 作者的PPT视频:https://www.youtube.com/ ...

  3. [COCI 2023/2024 #1] Mostovi 题解

    前言 题目链接:洛谷. 题目分析 首先可以确定的是需要枚举断边,所以我们希望两次枚举之间能有些关联.不难想到类树形 DP 的套路,建 DFS 树,只不过这题除了讨论和父亲之间的边,还要考虑返租边.以下 ...

  4. 018.CentOS升级内核

    一 更新yum源 1 [root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 2 [root@lo ...

  5. Linux 常见编辑器

    命令行编辑器 Vim Linux 上最出名的编辑器当属 Vim 了.Vim 由 Vi 发展而来,Vim 的名字意指 Vi IMproved,表示 Vi 的升级版.Vim 对于新手来说使用比较复杂,不过 ...

  6. Clobotics 计算机视觉场景存储实践:多云架构、 POSIX 全兼容、低运维的统一存储

    Clobotics 是一家将计算机视觉和机器学习技术应用于风电以及零售行业的企业.在风电行业,Clobotics 利用无人机对风力发电机叶片进行检查,显著降低了对人工作业的依赖.在零售领域,公司通过分 ...

  7. win11(含win10)自带的一键镜像备份与还原方法

    winxp和win7时代小伙伴们备份或恢复系统时大都采用类似一键ghost类的软件制作系统盘的映像,当遇到故障时再恢复,但win10和win11其实自带有这种映像制作和还原功能,我们就再也不需要额外安 ...

  8. 基于PaddleOCR + NLP实现证件识别

    基于PaddleOCR + NLP实现证件识别 PaddleOCR识别 paddleOCR安装 安装 anconda虚拟环境(可参考yolov5的安装教程) paddleOCR识别 PaddleNLP ...

  9. sicp每日一题[1.44]

    Exercise 1.44 The idea of smoothing a function is an important concept in signal processing. If f is ...

  10. Goby漏洞发布 | CVE-2024-4879 ServiceNowUI /login.do Jelly模板注入漏洞【已复现】

    漏洞名称:ServiceNowUI /login.do Jelly模板注入漏洞(CVE-2024-4879) English Name:ServiceNowUI /login.do Input Val ...