题意:

有n个不同的数字, 给定mmm,mmm为质数。问是否能够用这nnn个数字构造出一个模m意义下的等差数列,如果可以,请给出首项和公差。(2≤m≤109+7,1≤n≤105)(2\leq m\leq 10^9+7,1\leq n\leq 10^5)(2≤m≤109+7,1≤n≤105)


思路:

比赛时没有思路,赛后参考了quality的解法。

首先先介绍等差数列求和公式和平方项求和公式。

然后可以发现,因为我们可以预先求出SnS_nSn​与Sn2S_n^2Sn2​,因此只要能够确定出公差ddd,我们就可以求出首项a1a_1a1​。因此我们需要枚举公差ddd,首先将所有aia_iai​排序。对于a1a_1a1​来说,a2−ana_2-a_na2​−an​中一定有一个数最后与a1a_1a1​相邻,因此我们枚举所有ai,i∈[2,n]a_i,i\in [2,n]ai​,i∈[2,n],令d=ai−a1d=a_i-a_1d=ai​−a1​,然后求出公差为ddd时,首项为多少。然后再将求出的ddd与a1a_1a1​带入二次项公式进行检验 (这是一步剪枝操作),如果与二次项结果相同,则再根据现在的ddd与a1a_1a1​求出新的数组b[i]b[i]b[i],与a[i]a[i]a[i]一一比对,比对正确后输出结果。若最后也没找到正确结果,则输出−1-1−1。

可以发现此处Sn2S_n^2Sn2​的主要目的是剪枝,剪枝完后即可去掉大量情况,最终可以通过此题。


代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(ll i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 1e5+100;
const int M = 1e5+100;
const db EPS = 1e-9;
using namespace std;ll n,m,a[N],b[N];ll powe(ll a,ll b,ll p)
{ll ans = 1;ll base = a;while(b){if(b&1) ans = (ans*base)%p;b >>= 1;base = (base*base)%p;}return (ans%p);
}int main()
{scanf("%lld%lld",&m,&n);rep(i,1,n) scanf("%lld",&a[i]);if(n == 1) printf("%lld 0\n",a[1]);else{sort(a+1,a+1+n);ll sum1 = 0, sum2 = 0;rep(i,1,n) sum1 = (sum1+a[i])%m, sum2 = (sum2+a[i]*a[i]%m)%m;// LOG2("sum1",sum1,"sum2",sum2);rep(i,2,n){ll d = a[i]-a[1];ll xx = (sum1*powe(n,m-2,m)%m-(n-1)*d%m*powe(2,m-2,m)%m+m)%m;ll yy = ((n*xx%m)*xx%m+n*(n-1ll)%m*(2*n-1ll)%m*powe(6,m-2,m)%m*d%m*d%m+n*(n-1)%m*d%m*xx%m)%m;// LOG3("d",d,"xx",xx,"yy",yy);if(yy == sum2){b[1] = xx;rep(i,2,n) b[i] = (b[i-1]+d)%m;sort(b+1,b+1+n);int jud = 0;rep(i,1,n)if(a[i] != b[i]){jud=1;break;}if(!jud){printf("%lld %lld\n",xx,d);return 0;}}}printf("-1\n");}return 0;
}

【 Codeforces Round #395 (Div. 2) E】Timofey and remoduling【数学思维题 —— 等差/等比数列】相关推荐

  1. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  2. Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维

    传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每个数初始方向是向右,每次可以交换相邻两个位置并且将这两个位置的方向调换,问这个序列的最终状态能否是非递减且方向都向右. n≤1e5,ai≤1 ...

  3. Codeforces Round #588 (Div. 2) D. Marcin and Training Camp 思维

    传送门 文章目录 题意: 思路: 题意: 有nnn个人,每个人都有一个能力值bib_ibi​以及他会的技能aia_iai​,当他会第xxx个技能的时候,aia_iai​的第xxx位是111.定义当xx ...

  4. Codeforces Round #727 (Div. 2) E. Game with Cards dp + 思维

    传送门 文章目录 题意: 思路: 题意: 初始有左右手,上面各有一个数字为000的卡牌,每次都有一个新卡kik_iki​,你可以将其放在左手或者右手,使两只手上的卡片范围在[ll,i,rl,i][l_ ...

  5. Codeforces Round #715 (Div. 1) C. Complete the MST 补图 + 思维 + 最小生成树

    传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm个边的图,mmm条边是给定的,要求你给未给定的边赋值一个边权,使得所有边权异或和为000,求所有满足这种情况的图中最小生成树边权和最小的 ...

  6. Codeforces Round #632 (Div. 2) E. Road to 1600 构造好题

    传送门 文章目录 题意: 思路 题意: 直接白嫖 思路 首先不难发现,n≤2n\le2n≤2的时候是无解的. 现在我们来构造n=3n=3n=3的情况,通过打表可以发现如下矩阵是符合题目要求的: 179 ...

  7. Codeforces Round #632 (Div. 2) C. Eugene and an array 思维 + 前缀和

    传送门 文章目录 题意: 思路: 题意: 给定一个长度为nnn的序列aaa,定义一段区间为好区间是这段区间的所有连续子区间的和都不为000,求好区间的个数. 思路: 套路题,定义aia_iai​的前缀 ...

  8. Codeforces Round #462 (Div. 2) C. A Twisty Movement dp + 思维转换

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的只包含1,21,21,2的序列aaa,你可以至多翻转一段区间,求翻转之后最长非递减子序列是多长. 思路: 考虑如果翻转的话,翻转的子区间 ...

  9. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  10. Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理

    传送门 文章目录 题意: 思路: 题意: 让你给一个串染色,不同颜色且相邻的一对字符可以互换位置,用最少的颜色,使交换后这个字符串字典序最小. 思路: 考虑将字符串分成若干个非递减的子序列,由于其非递 ...

最新文章

  1. SAP 对HU做货物移动报错-Only 0 serial numbers entered instead of 30 -
  2. python输出特别的矩阵
  3. HTTPS Web配置举例
  4. 6、JavaScript进阶篇③——浏览器对象、Dom对象
  5. 无法保存打印机设置 0x000006d9
  6. 监听js变量的变化_Node.js从零开始——事件、系统和流
  7. 文件服务器访问权限分配,设置文件服务器的访问权限
  8. Codeforces Round #212 (Div. 2) C. Insertion Sort 思维
  9. 15_采用Pull解析器解析和生成XML内容
  10. 【深度优先搜索】计蒜客:引爆炸弹
  11. java web jsp/servlet 考勤管理系统
  12. 可编程串口接口芯片8251A
  13. word excel如何用印章生成器软件在线制作电子印章 电子公章图片
  14. AlphaGo已然独孤求败,通过人工智能解放鉴黄劳动力还会有多久?
  15. 半年亏损超5亿美元/股价腰斩,这家自动驾驶公司日子不好过
  16. 基于域名的虚拟主机配置
  17. 让PcShare2005vip免费
  18. 随机森林算法学习(RandomForest)
  19. 学校举办朗诵比赛,邀请了10位评委为每一名参赛选手的表现打分,打分由random库中的随机函数进行,打分范围在[80,100]之间,打分的结果存放在列表lst_score中。编写程序,根据以下规则计算
  20. 【LuoguP4233】射命丸文的笔记-多项式求逆

热门文章

  1. 【转】临界区、互斥对象
  2. Unable to get the project ile from the web server的解决方法
  3. SpringMVC实现ajax上传图片实时预览
  4. html获取url后面的参数_【python量化】用Python获取基金历史净值数据
  5. python装饰器打印函数执行时间_使用python装饰器计算函数运行时间的实例
  6. echarts使用_做数据可视化,为什么我们不再直接使用D3.js、Echarts
  7. javaaop模式供其他项目调用_结构性模型-静态代理模式
  8. openstack连通性检查显示验证失败_从超大规模部署到一体机,浪潮云海引领OpenStack落地新范式...
  9. string 操作 java_Java中String类的一些常见问题
  10. html+表格+左侧表头,HTML多表头表格代码