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 ...
随机推荐
- CSI 工作原理与JuiceFS CSI Driver 的架构设计详解
容器存储接口(Container Storage Interface)简称 CSI,CSI 建立了行业标准接口的规范,借助 CSI 容器编排系统(CO)可以将任意存储系统暴露给自己的容器工作负载.Ju ...
- Java案例——字符串中的数据排序
需求:有一个字符串"9 1 2 7 4 6 3 8 5 0",请编写程序实现从小到大数据排序 分析:最重要的部分是如何将字符串中的数据取出来 1.定义一个字符串为"9 1 ...
- ssh编译安装后重启失败问题
编译好的ssh重启出现如下报错 这个原因是因为systemd与ssh不兼容造成的 删掉服务 rm /usr/lib/systemd/system/sshd.service 重启 /etc/init.d ...
- k8s遇到invalid type for io.k8s.api.core.v1.PodSpec.containers
报错 error: error validating "taskcenter-v4-deployment.yaml": error validating data: Validat ...
- 5月16日 python学习总结 DBUtils模块、orm 和 cookie、session、token
一.DBUtils模块 介绍 The DBUtils suite is realized as a Python package containing two subsets of modules, ...
- 4月13日 python学习总结 组合与封装
一.组合 解决类与类之间代码冗余问题有两种解决方案:1.继承 2.组合 1.继承:描述的是类与类之间,什么是什么的关系 2.组合:描述的是类与类之间的关系,是一种什么有什么关系 一个类产生的 ...
- vue学习过程总结(01)- 开发环境的搭建
1.本地vue开发环境的搭建 1.1.下载NodeJs.下载地址:https://nodejs.org/en/download/ node.js的相关结束以及教程:https://www.runoob ...
- 1分钟为Win10瘦身!把吃掉的硬盘找回来
很多小伙伴升级完Win10后都发现C盘变小了,不少人以为这大概就是Win10太占磁盘空间了.但事实上,Win10和以前的操作系统一样,对于C盘空间并没有什么太高要求.出现这个问题的主要原因,是Win1 ...
- 记-Windows环境下Prometheus+alertmanager+windows_exporter+mtail监控部署
1.概述 最近因项目需要统计服务的负载情况及机器的负载情况,但是项目里面却没有相关统计而服务所在的机器也没有相关的监控,因为工期原因就选择了相对轻量级的prometheus方案.其中windows_e ...
- MySQL中的约束,添加约束,删除约束,以及其他修饰
一.NOT NULL(非空约束)添加非空约束 1)建表时直接添加 CREATE TABLE t_user(user_id INT(10) NOT NULL); 2)通过ALTER 语句 ALTER T ...