思路:
数论。
- 结论:如果存在A=ad,B=bd,gcd(A,B)=d,那么对于每一个 kB mod A(0<=k<=a-1)都是d的倍数且为[ 0 , a-1 ]的一种排列。
- 证明:kB=kbd,kB mod A = kbd-yad (y=[kB/A]) = (kb-ya)d。
- 反证法,如果存在iB mod A
jB mod A,则易得ad
(i-j)bd,ab互素,则a
(i-j),但由于k的取值范围,i-j<=a-1,显然不成立,故不存在重复倍数。
- kB mod A = kb - [ kb/a ] * a = a ( kb/a - [ kb/a ] ) < a,故范围确定。
在本题中我们可以令D为B,N为A,kD mod N,每a步都不会重复标记,在第a步时 aD mod N=abd mod ad=0,此时向前走一步,继续进行a步标记。
最后结果就是本轮次数(直接算)+轮数(偏移量)。
记得开ll。
#include <bits/stdc++.h>
using namespace std;
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
#define int ll
#define pb push_back
#define eb emplace_back
#define m_p make_pair
#define mod 998244353
#define mem(a,b) memset(a,b,sizeof a)
#define pii pair<int,int>
#define fi first
#define se second
#define inf 0x3f3f3f3f
const int N = 3e5 + 50;
//__builtin_ctzll(x);后导0的个数
//__builtin_popcount计算二进制中1的个数
void work() {
int n, K, D;
c

文章讨论了在编程竞赛中如何运用数论思想解决D-Marking问题,通过分析gcd(A,B)的性质推导出标记模式。接着介绍了E-MakeitPalindrome题目,通过计算贡献来确定构建回文串的最小代价。最后,文章探讨了F-MaximumDiameter问题,利用球盒模型解决最大直径的计算,涉及插板法和同球不同盒的计数策略。
「数论」「算贡献」「球盒问题」&spm=1001.2101.3001.5002&articleId=129287932&d=1&t=3&u=809e2bc7c78d4aaa911e86ccb354856f)
629

被折叠的 条评论
为什么被折叠?



