题解:GZOI2024 D2T2 乒乓球
考场上切了,但是比较神奇的题,应该是蓝/紫。
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\) 场,不难列出不等式组:
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\) 的下界知:
\]
这时候需要一点感性理解:
- 当 \(\textcircled{\small{4}}\) 时,\(\textcircled{\small{1}}\) 和 \(\textcircled{\small{3}}\) 中 \(q\) 的下界一定成立;
- 对于越大的 \(k\),\(\textcircled{\small{2}}\) 的下界不变,上界增大;
- \(\textcircled{\small{3}}\) 中区间长度与 \(k\) 无关,所以下界在 \(\le q\) 的前提下越大越好。
综上,\(k\) 越大越好,于是钦定:
\]
注意到此时可以调和级数 \(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\)。
分析前面的不等式组:
- \(\textcircled{\small{1}}\) 和 \(\textcircled{\small{3}}\) 中 \(q\) 的下界一定成立;
- 对于 \(\textcircled{\small{3}}\) 中 \(q\) 的上界 \(kx+y(x-1)\),代入 \(k\) 得:
\]
注意到 \(\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\) 的大前提即可。
k \le y-1\\
xy \le p \le xy+k(x-1) & \textcircled{\small{2}}\\
\end{cases}\]
考虑卡出 \(y\) 的范围,易得:
\]
改写一下向上取整:
\]
接着考虑怎么整除分块,比较好写的做法是:循环中先以 \(\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\)。
类似的,分析原不等式组:
- \(\textcircled{\small{1}}\) 和 \(\textcircled{\small{3}}\) 中 \(q\) 的下界一定成立;
- 对于 \(\textcircled{\small{2}}\) 中 \(p\) 的下界 \(xy\),
\]
\]
\]
\]
于是 \(\textcircled{\small{2}}\) 中 \(p\) 的下界的限制必成立;
- 对于 \(\textcircled{\small{3}}\) 中 \(q\) 的下界 \(kx\),
\]
\]
\]
\]
\]
于是 \(\textcircled{\small{3}}\) 中 \(q\) 的下界的限制必成立;
综上,只需考虑 \(\textcircled{\small{2}}\) 和 \(\textcircled{\small{3}}\) 中的上界。
\(p.s.\) 大前提 \(\lfloor\frac{q}{x}\rfloor \gt y-1\) 在 2. 和 3. 中考虑过了,无需再考虑。
p \le xy+k(x-1) & \textcircled{\small{2}} & (上界)\\
q \le kx+y(x-1) & \textcircled{\small{3}} & (上界)
\end{cases}\]
将 \(k=y-1\) 代入得:
p \le 2xy-x-y+1 & \textcircled{\small{2}} & (上界)\\
q \le 2xy-x-y & \textcircled{\small{3}} & (上界)
\end{cases}\]
考虑卡出 \(2xy-x-y\) 的范围,易得:
\]
类似的,卡出 \(y\) 的范围,易得:
\]
\]
这个就好写很多,直接整除分块即可。
给出实现:
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 乒乓球的更多相关文章
- 模拟、字符串--P1042 乒乓球 题解
P1042 乒乓球 字符串string的基本使用 #include <iostream> #include <algorithm> #include <map> # ...
- 【题解】Luogu P5313 僕たちはひとつの光([Ynoi2012]D2T2)
原题传送门 lovelive好评 比赛时只拿到了60pts,还是自己太菜了 这题的思想实际有点像Luogu P3674 小清新人渣的本愿与Luogu P5071 [Ynoi2015]此时此刻的光辉 这 ...
- 4560 NOIP2015 D2T2 子串
4560 NOIP2015 D2T2 子串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有两 ...
- HDU2094(产生冠军)题解
HDU2094(产生冠军)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 根据给定现有比赛结果推断分析冠军.(这描述...我建议还是看题吧,题不长) [题目分析] 给出的 ...
- HEOI2016 题解
HEOI2016 题解 Q:为什么要在sdoi前做去年的heoi题 A:我省选药丸 http://cogs.pro/cogs/problem/index.php?key=heoi2016 D1T1 树 ...
- pkuwc2018题解
题解: 思路挺好想的..然而今天写代码写成傻逼了 d1t1: 首先比较暴力的就是$f[i][j]$表示i个这个点是j的概率 然后前缀和一下dp就是$n^2$的 部分分树形态随机就说明树深度是$log$ ...
- HNOI2018简要题解
HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
- CQOI2018简要题解
CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...
- NOIP2017 题解
QAQ--由于没报上名并没能亲自去,自己切一切题聊以慰藉吧-- 可能等到省选的时候我就没有能力再不看题解自己切省选题了--辣鸡HZ毁我青春 D1T1 小凯的疑惑 地球人都会做,懒得写题解了-- D1T ...
随机推荐
- 关于python:pip安装选项“ ignore-installed”和“ force-reinstall”之间的区别
参考: https://www.codenong.com/51913361/ ==================================================== 官方文档解释: ...
- [POI2012] PRE-Prefixuffix 题解
前言 题目链接:洛谷. 题意简述 给出长为 \(n\) 的串 \(\texttt{S}\).求最大的 \(l\) 满足: \[2l \leq n \land \texttt{S}[1 \ldots l ...
- java-多线程(下)
多线程简单入门(Java)(下篇:多线程Java中的使用) 目录 一.创建多线程 二.线程的安全 三.线程的通信 一.创建多线程 在Java中,多线程的创建有4种方式. 方式一:继承于Thread类; ...
- (七)Redis 持久化 AOF、RDB
Redis 一旦服务器宕机,内存中的数据将全部丢失,从后端数据库恢复这些数据,对数据库压力很大,且性能肯定比不上从 Redis 中读取,会拖慢应用程序.所以,对 Redis 来说,实现数据的 持久化 ...
- vue3的defineAsyncComponent是如何实现异步组件的呢?
前言 在上一篇 给我5分钟,保证教会你在vue3中动态加载远程组件文章中,我们通过defineAsyncComponent实现了动态加载远程组件.这篇文章我们将通过debug源码的方式来带你搞清楚de ...
- stm32g070 usart 中断问题: 开启接收中断 RXNEIE 需要注意ISR的错误类型,否则会进入中断。
usart 中断问题: 开启接收中断 RXNEIE 需要注意ISR的错误类型,否则会进入中断. 调试时发现,如果ISR的ORE和FE置位,而此时要是使能RX中断(RXNEIE置位)就会进入中断复位程序 ...
- 利用Makefile给多文件、多目录C源码建立工程
0. 前言 粉丝留言,想知道如何使用Makefile给多个文件和多级目录建立一个工程,必须安排! 关于Makefile的入门参考文章,可以先看这篇文章: <Makefile入门教程> 为了 ...
- 手把手教你安装MINIGUI编程环境 (MINIGUI版本3.2.0)
0. MINIGUI MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明 ...
- AvaloniaChat—从源码构建指南
AvaloniaChat介绍 一个使用大型语言模型进行翻译的简单应用. 我自己的主要使用场景 在看英文文献的过程中,比较喜欢对照着翻译看,因此希望一边是英文一边是中文,虽然某些软件已经自带了翻译功能, ...
- mariadb5.5.56二进制离线安装
在生产环境中一般使用发布好的二进制版本,简单概括一下安装过程: 1. 下载 地址为:https://downloads.mariadb.org/mariadb/5.5.56/ 这里选择最新版本的5.5 ...