首页 > 其他分享 >CF1010C Border 题解

CF1010C Border 题解

时间:2023-10-06 18:45:51浏览次数:49  
标签:dots le gcd int 题解 CF1010C ans ia Border

题目传送门

前置知识

最大公约数 | 裴蜀定理

简化题意

给定一个长度为 \(n\) 的序列 \(a\),求能用 \(r=(\sum\limits_{i=1}^{n}d_ia_i) \bmod k\) 表示的不同的 \(r\) 的个数及所有情况,其中对于每一个 \(i(1 \le i \le n)\) 均有 \(d_i\) 为非负整数。

解法

依据裴蜀定理,不难得到存在一个长度为 \(n\) 的序列 \(x\) 满足 \(a_1 x_1+a_2 x_2+a_3 x_3+ \dots = \gcd(a_1,a_2,a_3, \dots ,a_n)\),其中对于每一个 \(i(1 \le i \le n)\) 均有 \(x_i\) 为整数。所以有 \(\gcd(a_1,a_2,a_3, \dots ,a_n)|\sum\limits_{i=1}^{n}d_ia_i\)。

设 \(d=\gcd(a_1,a_2,a_3, \dots ,a_n),\sum\limits_{i=1}^{n}d_ia_i=dl=kh+r\),不难得到当 \(h\) 极大时有一组长度为 \(n\) 的序列 \(x\) 满足对于每一个 \(i(1 \le i \le n)\) 均有 \(x_i\) 为非负整数。

  • 这里可以感性理解一下。

于是可以建立一个不定方程 \(dl=kh+r\),用 \(x'\) 代替 \(l\),用 \(y'\) 代替 \(-h\),得 \(dx'+ky'=r\)。依据裴蜀定理,该方程有解当且仅当 \(\gcd(d,k)|r\)。所以共能组成 \(\dfrac{r}{\gcd(d,k)}\) 个不同的数,为保证递增有第 \(i(1 \le i \le \dfrac{r}{\gcd(d,k)})\) 个数为 \((i-1) \times \gcd(d,k)\)。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define sort stable_sort 
#define endl '\n'
int a[500001];
int gcd(int a,int b)
{
	return b?gcd(b,a%b):a;
}
int main()
{
	int n,k,i,ans=0;
	cin>>n>>k;
	ans=k;
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
		ans=gcd(ans,a[i]);
	}
	cout<<k/ans<<endl;
	for(i=0;i<=k/ans-1;i++)
	{
		cout<<i*ans<<" ";
	}
	return 0;
}

标签:dots,le,gcd,int,题解,CF1010C,ans,ia,Border
From: https://www.cnblogs.com/The-Shadow-Dragon/p/17744819.html

相关文章

  • CF131D Subway 题解
    题目传送门前置知识强连通分量|最短路解法考虑用Tarjan进行缩点,然后跑最短路。缩点:本题的缩点有些特殊,基于有向图缩点修改而得,因为是无向图,所以在Tarjan过程中要额外记录一下从何处转移过来,防止在同一处一直循环。基环树上找环还有其他方法,这里仅讲解使用Tarjan求......
  • 题解: P6933
    题目传送门这道题我用的是二分答案,只不过这道题和一般的二分答案有些不同,是浮点数的二分答案。那自然和整数的二分答案有些不同,下面我会说到。我们先来看一下思路解法。思路解法首先确定了是二分答案,我们需要先确定初始的\(l\)和\(r\)和check函数。check函数好写,我们......
  • 【UVA 514】Rails 题解(栈+队列)
    PopPush市有一个著名的火车站。那个里的乡村是令人难以置信的丘陵。车站建于上世纪。不幸的是,当时资金极其有限。有可能仅建立表面轨迹。此外,事实证明,该站可能只是一个死胡同(见图片),由于缺乏可用空间,它只能有一个轨道。当地的传统是,每一列从A方向到达的火车都会继续朝A方向行驶......
  • 【题解 P4550】 收集邮票
    收集邮票题目描述有\(n\)种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是\(n\)种邮票中的哪一种是等概率的,概率均为\(1/n\)。但是由于凡凡也很喜欢邮票,所以皮皮购买第\(k\)次邮票需要支付\(k\)元钱。现......
  • neovim的插件管理器vim-plug导致代码颜色不显示问题解决
    neovim的帮助文件路径F:\Programs\Neovim\share\nvim\runtime\docruntimepath的帮助文档路径F:\Programs\Neovim\share\nvim\runtime\doc\options.txt$VIM环境变量$VIM被用来确定Vim中不同的用户文件的位置,比如用户启动脚本“.vimrc”。这个是系统设置,详见startup。允许每......
  • 关于洛谷题解审核
    我想问一下,大家觉得题解的重点是什么?很显然是思路,代码的正确性,次要的才是格式。但是,洛谷对于题解格式的审核是不是有点过于严格了呢?比如说这段话:如果\(n\)为\(0\),那么便是无解。大家能一眼看出,后面多了空格吗?这种题解其实没什么大问题,别人看题解时根本不会在意这些......
  • 【bitset】【线段树】CF633G Yash And Trees 题解
    CF633G简单题。先看到子树加和子树质数个数和,果断转换为dfs序进行处理。既然有区间求和,考虑线段树。若对于每一个节点维护一个\(cnt\)数组,用二进制数\(x\)来表示,即当\(cnt_i=1\)时第\(i\)位为\(1\)。设当前节点为\(u\),左右子节点分别为\(ls\)和\(rs\)。发现......
  • 【倍增】P3422 [POI2005]LOT-A Journey to Mars 题解
    P3422一道有点意思的题。看到是一个环,先破环为链,即\(a_{n+i}=a_i,b_{n+i}=b_i\),此时就只需要跳到\(x+n\)而无需判环了。如果顺时针走:令\(sum_i=\sum\limits_{j=1}^{i}{a_j-b_j}\),当能从\(x\)跳到\(x+n\)时,有\[sum_{x-1}\lesum_x,sum_{x-1}\lesum_{x+1},\dot......
  • 【DP】ABC273F Hammer 2 题解
    ABC273F一道比较板的区间\(\text{dp}\)。先对坐标离散化,令离散化数组为\(v\)。令\(f_{i,j}\)表示能走到区间\([v_i,v_j]\)的最短路程,显然\(f\)数组初始为\(inf\)。但发现这样无法转移,可以再增加一维\(k\in\{0,1\}\),表示此时在\([v_i,v_j]\)的\(v_i/v_j\)处。......
  • 【线段树合并】CF1805E There Should Be a Lot of Maximums 题解
    CF1805E待补:有另解看到维护树上问题,可以想到线段树合并。但直接维护显然不行,要一点技巧。发现\(val\)的出现次数\(cnt_{val}\)如果\(\ge3\),那么一定是一个候选项,若\(cnt_{val}=1\),那么一定不能作为候选项。于是可以用权值线段树维护对于\(val\)有\(cnt_{val}=......