洛谷题面传送门 & Atcoder 题面传送门

一道难度 Au 的 AGC F,虽然看过题解之后感觉并不复杂,但放在现场确实挺有挑战性的。

首先第一问很简单,只要每次尽量让“辗转相除”变为“辗转相减”即可,具体构造就是 \((F_k,F_{k+1})\),其中 \(F_i\) 为斐波那契数列第 \(i\) 项,\(F_0=F_1=1\),也就是说最终的答案即为最大的 \(k\) 满足 \(F_{k-1}\le X\) 且 \(F_k\le Y\)(不妨假设 \(X\le Y\))。

接下来考虑第二问,我们记 \(A(i,j)\) 表示 \(i,j\) 辗转相除法求 gcd 的次数,\(B(i,j)\) 表示 \(X=i,Y=j\) 时的答案,那么我们显然要求的是 \(A(i,j)=B(i,j)=A(X,Y)\) 且 \(i\le X,j\le Y\) 的 \((i,j)\) 对数,不难发现这个对数可能很多,但我们还可以发现对于某个 \(A(i,j)=B(i,j),i<j\) 的二元组 \((i,j)\),一定有 \(A(i,j+ki)=B(i,j+ki),k\in\mathbb{Z}\),因此我们只用考虑 \(A(i,j)=B(i,j)\) 且 \(i<j\le 2i\) 的二元组 \((i,j)\) 即可,打个表即可发现这样的二元组个数不是太多,具体来说,满足 \(A(i,j)=B(i,j)=k,i<j\le 2i\) 的二元组 \((i,j)\) 总共只有 \(k-1\) 个,因此我们考虑这样一个思路:对每个 \(k\) 预处理出满足 \(A(i,j)=B(i,j)=k,i<j\le 2i\) 的所有二元组,然后每次询问暴力枚举每个这样的二元组统计答案,于是现在我们只需考虑怎样求出二元组即可。

首先 \(k=2\) 时候显然只有一个二元组 \((1,2)\),我们考虑已经求出了 \(k-1\) 时所有符合条件的二元组 \((a,b)\),那么显然 \(A(b,a+b)=A(a,b)+1\),而根据 \(a<b\le 2a\) 可知 \(a+b<2b\),因此 \(b<a+b<2b\),故 \((b,a+b)\) 为符合条件的二元组,又因为对于所有互不相同的二元组 \((a,b)\),它扩展得到的 \((b,a+b)\) 也两两不同,因此得到的 \(k-2\) 个二元组也两两互不相同。但是这样还会漏掉一个二元组,不难发现 \((F_{k+1}+F_{k-1},F_{k+1})\) 也是符合条件的二元组并且没有被我们计算,把它算上就不重不漏刚好 \(k-1\) 个了。

时间复杂度 \(\log^2A+q\log A\)。注意对于答案等于 \(1\) 的情形,所有形如 \((i,i)(i\in[1,\min(X,Y)])\) 的二元组也符合条件,因此答案要加上 \(\min(X,Y)\)

const int MAX=100;
const int MOD=1e9+7;
const ll MAXV=1e18;
ll fib[MAX+5];int cnt=1;
vector<pair<ll,ll> > prs[MAX+5];
int main(){
fib[0]=fib[1]=1;
while(fib[cnt]+fib[cnt-1]<=MAXV) fib[cnt+1]=fib[cnt]+fib[cnt-1],++cnt;
prs[1].pb(mp(1,2));
for(int i=2;i<=cnt;i++){
for(pair<ll,ll> p:prs[i-1]) prs[i].pb(mp(p.se,p.fi+p.se));
prs[i].pb(mp(fib[i+1],fib[i-1]+fib[i+1]));
} int qu;scanf("%d",&qu);
while(qu--){
ll x,y,ans=0;scanf("%lld%lld",&x,&y);
int cur=1;if(x>y) x^=y^=x^=y;
while(cur+2<=cnt&&fib[cur+1]<=x&&fib[cur+2]<=y) ++cur;
for(pair<ll,ll> p:prs[cur]){
if(p.fi<=x&&p.se<=y) ans+=(y-p.se)/p.fi+1;
if(p.se<=x) ans+=(x-p.se)/p.fi+1;ans%=MOD;
} if(cur==1) (ans+=x)%=MOD;
printf("%d %lld\n",cur,ans);
}
return 0;
}

Atcoder Grand Contest 015 F - Kenus the Ancient Greek(找性质+乱搞)的更多相关文章

  1. AtCoder Grand Contest 002 F:Leftmost Ball

    题目传送门:https://agc002.contest.atcoder.jp/tasks/agc002_f 题目翻译 你有\(n*k\)个球,这些球一共有\(n\)种颜色,每种颜色有\(k\)个,然 ...

  2. AtCoder Grand Contest 017 F - Zigzag

    题目传送门:https://agc017.contest.atcoder.jp/tasks/agc017_f 题目大意: 找出\(m\)个长度为\(n\)的二进制数,定义两个二进制数的大小关系如下:若 ...

  3. AtCoder Grand Contest 003 F - Fraction of Fractal

    题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_f 题目大意: 给定一个\(H×W\)的黑白网格,保证黑格四连通且至少有一个黑格 定义分形如下 ...

  4. AtCoder Grand Contest 015 C - Nuske vs Phantom Thnook

    题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为 ...

  5. AtCoder Grand Contest 011 F - Train Service Planning

    题目传送门:https://agc011.contest.atcoder.jp/tasks/agc011_f 题目大意: 现有一条铁路,铁路分为\(1\sim n\)个区间和\(0\sim n\)个站 ...

  6. AtCoder Grand Contest 010 F - Tree Game

    题目传送门:https://agc010.contest.atcoder.jp/tasks/agc010_f 题目大意: 给定一棵树,每个节点上有\(a_i\)个石子,某个节点上有一个棋子,两人轮流操 ...

  7. AtCoder Grand Contest 016 F - Games on DAG

    题目传送门:https://agc016.contest.atcoder.jp/tasks/agc016_f 题目大意: 给定一个\(N\)点\(M\)边的DAG,\(x_i\)有边连向\(y_i\) ...

  8. AtCoder Grand Contest 015 E - Mr.Aoki Incubator

    题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_e 题目大意: 数轴上有\(N\)个点,每个点初始时在位置\(X_i\),以\(V_i\)的速 ...

  9. Atcoder Grand Contest 038 F - Two Permutations(集合划分模型+最小割)

    洛谷题面传送门 & Atcoder 题面传送门 好久前做的题了--今天偶然想起来要补个题解 首先考虑排列 \(A_i\) 要么等于 \(i\),要么等于 \(P_i\) 这个条件有什么用.我们 ...

随机推荐

  1. 浏览器有别_HTTP报文的回车换行

    本来以为浏览器HTTP报文的生成应该是完全一致的.但最近在做一个项目的时候,发现Safari和Chrome提交同一份表单,后端的处理结果不一致.看提交结果呢,是因为Safari多了个回车.由于原项目的 ...

  2. leetcode347 —— n中topK && PriorityQueue(Heap) && Map遍历

    题目要求:求前K个最频繁出现的数字. 1.很容易想到,使用HashMap<Integer,Integer>来存储<number,frequency>键值对 1 int n = ...

  3. SharkCTF2021 Babyhttp && get_or_lose

    两道web. Babyhttp: 直接dirsearch,发现同时存在git和bak泄露:经验证,git的没用. 访问index.php.bak, 下载源码: 抓包,改包,发包即可. get_or_l ...

  4. Go语言核心36讲(Go语言进阶技术六)--学习笔记

    12 | 使用函数的正确姿势 在前几期文章中,我们分了几次,把 Go 语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型. 在几乎所有主流的编程语言中, ...

  5. 全志Tina_dolphin播放音视频裸流(h264,pcm)验证

    最近在验证tina对裸流音视频的支持,主要指h264视频裸流及pcm音频裸流. 在原始sdk中有针对很多video和audio类型的parser,但就是没有找到pcm和h264的parser,所以需要 ...

  6. PCIE基本知识

    转载:https://zhuanlan.zhihu.com/p/139656925 前言 之前主要都在做FPGA算法层面的东西,最近觉得对于接口方面的知识比较欠缺,打算以PCI-E为例来系统的学习一下 ...

  7. P2598 [ZJOI2009]狼和羊的故事(最小割)

    P2598 [ZJOI2009]狼和羊的故事 说真的,要多练练网络流的题了,这么简单的网络流就看不出来... 题目要求我们要求将狼和羊分开,也就是最小割,(等等什么逻辑...头大....) 我们这样想 ...

  8. 设计模式(1-3)-动态代理(WeakCache的运用)

    阅读本篇文章前,请事先阅读 理解Java的强引用.软引用.弱引用和虚引用. 看看什么是强引用.什么是弱引用及它们的用途,很必要!!! 上一节讲到,获取对应的代理类时,首先会从缓存中去拿,若拿不到才会去 ...

  9. 基于 Istio 的全链路灰度方案探索和实践

    作者|曾宇星(宇曾) 审核&校对:曾宇星(宇曾) 编辑&排版:雯燕 背景 微服务软件架构下,业务新功能上线前搭建完整的一套测试系统进行验证是相当费人费时的事,随着所拆分出微服务数量的不 ...

  10. C语言图书管理借阅系统——ncurses库的使用

    一.前言 作为一只大四狗,最近还跟着大二同学修了一门课(当然不是之前没通过啦),课程是高级语言课程设计,高级语言指的是C语言 :),内容是做一个XX管理系统,我选择了图书管理系统,先介绍下我做的系统: ...