传送门: https://codeforces.com/contest/1484/problem/B

原题

Example
input
6
6
1 9 17 6 14 3
3
4 2 2
3
7 3 4
3
2 2 4
5
0 1000000000 0 1000000000 0
2
1 1
output
19 8
-1
-1
-1
2000000000 1000000000
0

题意

(前言: 这次唯一没有遗憾的怕就是没有英语bug了, 2个小时, b题依然没过, 思路大致对, 但是但是, 代码写出来写好最关键!)

给一个数组, 有n个数字, 其中a1=s%m, ai=(ai-1+c)%m    (这里描述的下标是从1~n, 其中0<=c<m)

目标:输出以下符合的条件一点

   1. 找出m, c并输出; 

  2.m可无限大时, 输出0

  3.没有匹配的m, c时, 输出-1


思路

总体来看:

c还是好想的, (虽然刚开始毫无思路, 这时候上手就行了, 划拉划拉就有思路了)

对c来说: 只要ai-1 < ai , 因为c<m, 加上的数不会大于取模的值, 这次没有用到取余ai-1 + c = ai, 那c = ai - ai-1

求到了c后, m也好找了, 只要ai-1 > a, 那么这次肯定用到取余了, (ai-1 + c) % m = ai , 其中商一定为1, 那么变形得到m = ai-1 - ai + c

逐个击破, 先看特殊情况:

(一) m可无限大:  数列单调而且为等差数列, ai - ai-1 == 0也行

(二) 没有匹配的值时, 两种情况: 

              1. m, c无法求.   -----> 缺少ai-1 < a或 ai-1 > ai,

              2. m, c求后不符合条件.   -----> m小于数列最大值或增减两情况下ai - ai-1有多组答案, 即size>1(0<=c<m一定满足, 因为m = c + 一个正数)

 


收获

明白了这些我的代码写的依然很乱, 第一次体验代码能力的重要性.

当时专门写了两个循环来看m, c, 其中还有个循环, 每次都用了max()函数,

事后看了大佬的代码后, 发现一个set函数就直接解决了(二).1, 分别求出了递增和递减的, 而且Set函数自带去重

每次都用max函数, 复杂度会偏高, 不如最后一次用sort, 二分排序, 快得很

代码

#include <iostream>
#include <set>
#include <algorithm>

using namespace std; const int N=1e5+10; int a[N]; int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
set<int> fir, sec;
for(int i = 0;i <n;i ++)
{
cin >> a[i];
if(i)
if(a[i] < a[i-1])//c可以为 0
fir.insert(a[i]-a[i-1]);
else
sec.insert(a[i]-a[i-1]);
}
if(fir.size() > 1 || sec.size() > 1)
puts("-1");
else if(fir.size() == 0 || sec.size() == 0)
puts("0");
else
{
int c = *sec.begin();
int m = c - *fir.begin();
sort(a, a+n);
if(m <= a[n-1])
puts("-1");
else
printf("%d %d\n", m, c);
} }
return 0;
}

作者:la-la-wanf
链接:https://www.cnblogs.com/la-la-wanf/p/14566941.html
来源:博客园
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Cf #709 Div. 2 B. Restore Modulo 一个只有三千多人过的b题, 妙啊!的更多相关文章

  1. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-D. Restore Permutation-构造+树状数组

    Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-D. Restore Permutation-构造+树状数组 [Pro ...

  2. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  3. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

  4. CF #374 (Div. 2) D. 贪心,优先队列或set

    1.CF #374 (Div. 2)   D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...

  5. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

  6. CF #371 (Div. 2) C、map标记

    1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...

  7. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组

    题目链接:CF #365 (Div. 2) D - Mishka and Interesting sum 题意:给出n个数和m个询问,(1 ≤ n, m ≤ 1 000 000) ,问在每个区间里所有 ...

  8. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)

    转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...

  9. 使 div 元素看上去像一个按钮

    使 div 元素看上去像一个按钮 div { appearance:button; -moz-appearance:button; /* Firefox */ -webkit-appearance:b ...

随机推荐

  1. Linux----虚拟机克隆、快照、删除、

    克隆 已经安装一台linux系统 还想要更多的,直接克隆CentOS即可 使用vm ware 的克隆操作 注意: 使用前先关闭目前已开启的虚拟机 快照 作用: 虚拟系统出现异常,需要回到原先的状态,此 ...

  2. python3生成10个成绩列表,求其平均分

    import random alist = [random.randint(45,101) for _ in range(10)] #在[45.101)之间生成10个随机数 print(alist) ...

  3. Nginx 静态文件服务

    Nginx 静态文件服务 我们先来看看最简单的本地静态文件服务配置示例: server { listen 80; server_name www.test.com; charset utf-8; ro ...

  4. sql注入mysql注入

    #跨库查询及应用思路 information_schema表特性,记录数据库名.表名.列名对应表 information_schema.schemata:存储所有数据库名 schema_name:数据 ...

  5. CF736D Permutations(伴随矩阵)

    CF736D Permutations(伴随矩阵) Luogu 题解时间 首先把边直接放进邻接矩阵, 很明显行列式的奇偶和方案数的奇偶一样. 设 $ A_{ i , j } $ 为矩阵的该行列的余子式 ...

  6. 如何使用docker制作开发集成环境

    1. 编写最基本的Dockerfile 内容:touch 一个Dockerfile FROM ubuntu 2. 创建基本的docker镜像 docker build  -t ubuntu:v1 . ...

  7. 解决IDEA的maven项目 添加依赖后Reimport无反应

    解决IDEA的maven项目 添加依赖后Reimport无反应   如果重启项目和编译器都不管用的话, 找到项目在硬盘上的位置  把该项目的.idea文件夹和xxx.iml文件删除    打开IDEA ...

  8. Mycat新增数据报错can't fetch sequnce in db,sequnce

    Mycat报错 2021-11-08 17:13:01,310 [ERROR][Thread-1] MyCATSequenceProcessor.executeSeq(SesionSQLPair) j ...

  9. 如何通过HibernateDaoSupport将Spring和Hibernate结合起来?

    用Spring的 SessionFactory 调用 LocalSessionFactory.集成过程分三步: 配置the Hibernate SessionFactory. 继承HibernateD ...

  10. spring-boot-learning-REST风格网站

    什么是REST风格: Representational State Transfer :表现层状态转换,实际上是一种风格.标准,约定 首先需要有资源才能表现, 所以第一个名词是" 资源&qu ...