Cf #709 Div. 2 B. Restore Modulo 一个只有三千多人过的b题, 妙啊!
传送门: https://codeforces.com/contest/1484/problem/B
原题

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
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 > ai , 那么这次肯定用到取余了, (ai-1 + c) % m = ai , 其中商一定为1, 那么变形得到m = ai-1 - ai + c
逐个击破, 先看特殊情况:
(一) m可无限大: 数列单调而且为等差数列, ai - ai-1 == 0也行
(二) 没有匹配的值时, 两种情况:
1. m, c无法求. -----> 缺少ai-1 < ai 或 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题, 妙啊!的更多相关文章
- 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 ...
- CF #376 (Div. 2) C. dfs
1.CF #376 (Div. 2) C. Socks dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...
- CF #375 (Div. 2) D. bfs
1.CF #375 (Div. 2) D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...
- CF #374 (Div. 2) D. 贪心,优先队列或set
1.CF #374 (Div. 2) D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...
- CF #374 (Div. 2) C. Journey dp
1.CF #374 (Div. 2) C. Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...
- CF #371 (Div. 2) C、map标记
1.CF #371 (Div. 2) C. Sonya and Queries map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...
- 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) ,问在每个区间里所有 ...
- 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 ...
- 使 div 元素看上去像一个按钮
使 div 元素看上去像一个按钮 div { appearance:button; -moz-appearance:button; /* Firefox */ -webkit-appearance:b ...
随机推荐
- pygame.update()与pygame.flip()的区别
flip函数将重新绘制整个屏幕对应的窗口. update函数仅仅重新绘制窗口中有变化的区域. 如果仅仅是几个物体在移动,那么他只重绘其中移动的部分,没有变化的部分,并不进行重绘.update比flip ...
- [SPDK/NVMe存储技术分析]010 - 理解SGL
在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持 ...
- java进行远程部署与调试及原理解析
远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用. JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过 ...
- 采用WPF开发第二版OFD阅读器,持续完善中,敬请期待!
本人研究OFD多年,采用C#和QT开发了一系列ofd相关软件.在这些产品中,阅读器始终占据着非常重要的位置.可以说,阅读器是直接面向最终客户的产品.是集OFD各类知识之大成的产品.市面上的阅读器产品林 ...
- 一个序列出现固定元素个数的方法(DFS)
#include <iostream.h> int a[100];int i; static int stat=0; void dfs(int n,int oneCount) { if(o ...
- jQuery的优缺点,与vue的不同,vue的优缺点?
jq优点: 比原生js更易书写, 封装了很多api, 有丰富的插件库; 缺点: 每次升级与之前版本不兼容, 只能手动开发, 操作DOM很慢, 不方便, 变量名污染, 作用域混淆等. vue优缺点: 双 ...
- 下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"?
对于如下代码: String s1 = "a"; String s2 = s1 + "b"; String s3 = "a" + " ...
- Mycat新增数据报错can't fetch sequnce in db,sequnce
Mycat报错 2021-11-08 17:13:01,310 [ERROR][Thread-1] MyCATSequenceProcessor.executeSeq(SesionSQLPair) j ...
- 并发场景下HashMap死循环导致CPU100%的问题
参考链接:并发场景下HashMap死循环导致CPU100%的问题
- @Qualifier 注解 ?
当有多个相同类型的 bean 却只有一个需要自动装配时,将@Qualifier 注解和 @Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean.