首页 > 其他分享 >[CF2043D] Problem about GCD 题解

[CF2043D] Problem about GCD 题解

时间:2025-01-04 19:33:01浏览次数:1  
标签:about frac 17 16 题解 filename 倍数 Problem define

首先的一个观察是可以把 \(G\) 除掉,转化成 \([\lceil \frac{l}{G} \rceil,\lfloor \frac{r}{G} \rfloor]\) 中的两个互质数的差最大值。
然后的性质非常神奇。令 \(l' \gets \lceil \frac{l}{G} \rceil, r' \gets \lfloor \frac{r}{G} \rfloor\)。若 \(r'-l'\) 充分大,则一定有一组解 \((A,B)\),满足 \(A \in [l', l'+5],B \in [r'-16,r']\)。证明可以去出数学题了()。

证明 首先有引理:

  • 区间 \([l, l+5]\) 中必有一个数与 \(30\) 互质。按模 \(5\) 的剩余系分类易证。

记这个数为 \(a\)(\(\le 10^{18}\)),其所有质因子至多有 \(12\) 个,分别大于等于 \(7,11,13,17,19,...,47\)。而连续 \(17\) 个数中,最多 \(3\) 个是 \(7\) 的倍数,\(2\) 个是 \(11\) 的倍数,\(2\) 个是 \(13\) 的倍数,\(1\) 个是 \(17\) 的倍数,……,\(1\) 个是 \(47\) 的倍数。加起来一共 \(16\) “个”。显然不可能全部“铺满”整个区间 \([r'-16,r']\)。故其中至少一个与 \(a\) 互质。得证。

于是暴力枚举 \(800\) 组就结束了。

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define Linf 0x3f3f3f3f3f3f3f3f
#define pii pair<int, int> 
#define int long long
#define all(v) v.begin(), v.end()
using namespace std;

//#define filename "xxx" 
#define FileOperations() freopen(filename".in", "r", stdin), freopen(filename".out", "w", stdout)


namespace Traveller {
	const int N = 1;
	
	int l, r, G;
	
	void main() {
		cin >> l >> r >> G;
		l = (l + G-1) / G, r /= G;
		if(l > r) {
			cout << "-1 -1\n";
			return;
		}
		if(l == r) {
			if(l == 1) cout << G << ' ' << G << '\n';
			else cout << "-1 -1\n";
			return;
		}
		
		int mxd = 0, ansl = 0, ansr = 0;
		for(int L = l; L <= l+5 && L <= r; ++L)
			for(int R = r; R >= r - 16 && R >= L; --R)
				if(R - L > mxd) {
					if(__gcd(L, R) == 1) mxd = R - L, ansl = L, ansr = R;
				}
		if(ansl) cout << ansl * G << ' ' << ansr * G << '\n';
		else cout << "-1 -1\n";
	}
}

signed main() {
	#ifdef filename
		FileOperations();
	#endif
	
	int _;
	cin >> _;
	while(_--) Traveller::main();
	return 0;
}


标签:about,frac,17,16,题解,filename,倍数,Problem,define
From: https://www.cnblogs.com/wfc284/p/18652320

相关文章

  • P4229 某位歌姬的故事 题解
    题目描述\(T\)组数据,求有多少个长为\(n\)的数组\(h\)满足\(1\leh_i\lea\)和以下\(q\)条限制:\[\max_{l_i\lej\leh_i}h_j=w_i\]对\(998244353\)取模。数据范围\(1\leT\le20\)。\(1\len,a\le9\cdot10^8,1\leq\le500\)。\(1\lel_i\ler_i\len,......
  • P5680 [GZOI2017] 共享单车 题解
    题目传送门前置知识最短路|最近公共祖先|虚树解法题目中所说的回收路线树即以\(k\)为根节点的最短路径树,可以使用Dijkstra构建。标记回收区域本质上是对回收区域构建虚树,然后就和luoguP2495[SDOI2011]消耗战基本一致了,根据儿子节点的投放状态进行树形D......
  • 高频 Python 面试题解析(附代码解释)
    高频Python面试题解析(附代码解释)引言Python作为目前最受欢迎的编程语言之一,广泛应用于Web开发、数据分析、人工智能等领域。在面试中,Python的基础知识、数据结构、算法等方面的高频问题总是被考察。因此,在这篇文章中,我们将深入剖析一些常见的Python面试题,帮助你轻松应对面试挑......
  • P10145 [WC2024] 线段树 题解
    P10145[WC2024]线段树题解\(\mathcalO(4^{n})\)做法对于线段树上的一个节点区间\([l,r)\)我们连无向边\((l,r)\),那么可以用加减表示出一个区间\([L,R)\)等价于\(L,R\)两点联通。于是可以枚举每条边选或不选,用可撤销并查集判断两点是否联通,复杂度\(\mathcalO(2^{2......
  • 【题解】AT agc057A Antichain of Integer Strings
    记\(f(x)\)为最小的大于\(x\)的\(y\),使得\(x\)是\(y\)的子串。易得:\[f(x)=\min(10x,x+10^{|x|})\]其中\(|x|\)表示\(x\)的位数。可以发现,\(f(x)\)为一个严格单调递增的函数。考虑贪心策略,显然选小的数不如选大的数优,因为小的数更有可能成为别的数的子串。于是,我......
  • 网卡丢包问题解决
    1、查看局域网内是否有MAC冲突;2、UDP丢包可以先增大协议栈缓存空间:接收端:echo2129999999>/proc/sys/net/core/rmem_maxecho2129999999>/proc/sys/net/core/rmem_default发送端:echo2129999999>/proc/sys/net/core/wmem_defaultecho2129999999>/proc/sys......
  • Luogu P4287 SHOI2011 双倍回文 题解 [ 紫 ] [ manacher ]
    双倍回文:回文子串结论的经典应用。结论先放本题最关键的结论:一个字符串本质不同的回文子串最多只有\(n\)个。考虑如何证明:假设我们一个一个地在当前字符串(黑色部分)的结尾加入字符(红色部分),那么会出现如下情况:显然,加入红色字符后,字符串中最多只可能新出现一个本质不同的回文......
  • P1309 [NOIP2011 普及组] 瑞士轮 题解
    P1309[NOIP2011普及组]瑞士轮题目大意:for(i<=r)让这2n个选手的成绩降序排序,第1-第2打,第3-第4打,......,第2n-1和第2n打i--i+1打,谁能打赢?谁的实力大谁就打赢了排序最快是2nlogn,所以上述暴力过程,时间复杂度是:R(2nlog2n+2n)=2e8超时了解释:为什么是......
  • 题解:AtCoder [ARC176D] Swap Permutation
    题意原题链接给定一个长度为\(n\)的排列\(p\),并执行以下操作\(m\)次:选择\(1\leqi<j\leqn\),交换\(p_i\)和\(p_j\)。定义一个序列\(p\)的权值为\(\sum_{i=1}^{n-1}|p_i-p_{i-1}|\)。求在\(\binom{n}{2}^m\)种可能的操作后,\(p\)的价值之和。答案对\(998244353\)......
  • 题解:CF1830A Copil Copac Draws Trees
    首先这道题肯定不能暴力枚举,我们要思考其他算法。我们可以给每一条边编一个号。然后从根开始遍历这棵树,当一条边的编号比他祖先到他祖先的祖先的那条边的编号还要小时,就说明顺序错了,要再等一轮。这个就简单了,直接dfs就行,注意答案要加\(1\)。#include<bits/stdc++.h>using......