[luoguU42591][小T的绝对值]
luoguU42592
20分思路
对给出的序列求出前缀和,然后\(n^2\)暴力枚举即可拿到第一档分
40分思路
对于数列中的数都相同的情况。只需要特判即可。只要特别注意全都是0的情况即可。
100分思路
仔细考虑一下题目意思就可以知道,其实这个题就是求出前缀和之后,对于每个位置上的数,在前面的所有数中找一个与它差值最小的数。也就是找比他大的最小的数和比他小的最大的书。考虑到二分,可惜前面的数没有单调性。然后跟随某某某快乐的写起了set,然后t到飞起。
重新再考虑这个题,其实没有必要非得在前面找与他差值最小的数,可以是在全部的数中寻找,因为如果后面有差值更小的,肯定会把前面的覆盖掉。所以考虑到sort一边,然后只要记录下相邻的两个数差值更小的那个即可。对于差值相同的,再去比较区间长度就可以了。
代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1000000+100,INF=1e19+100;
ll read() {
ll x=0,f=1; char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
struct node {
ll x,pos;
}a[N];
ll ab(ll x) {
return x<0?-x:x;
}
bool cmp (node x,node y) {
return x.x==y.x?x.pos<y.pos:x.x<y.x;
}
ll b[N];
int main() {
int n=read();
int bz=1;
for(int i=1;i<=n;++i) {
b[i]=read();
if(b[i]!=b[i-1]&&i>1) bz=0;
a[i].x=b[i]+a[i-1].x;
a[i].pos=i;
}
if(bz==1) {
if(b[1]==0) printf("0\n%lld",n);
else printf("%lld\n1",ab(b[1]));
return 0;
}
sort(a,a+n+1,cmp);
int now=0;
ll ans=INF,pos=0;
for(int i=1;i<=n;++i) {
if(ab(a[i].x-a[now].x)<ans) {
pos=ab(a[i].pos-a[now].pos);
ans=ab(a[i].x-a[now].x);
}
else if(ab(a[i].x-a[now].x)==ans&&ab(a[i].pos-a[now].pos)>pos)
pos=ab(a[i].pos-a[now].pos);
if(a[i].x!=a[i-1].x)
now=i;
}
cout<<ans<<"\n"<<pos;
return 0;
}
[luoguU42591][小T的绝对值]的更多相关文章
- [luoguU42591][小T的面试题]
luoguU42591 题意: n个不超过n的正整数中,其中有一个数出现了两次,其余的数都只出现了一次, 求这个出现两次的数. 思路: 这个题的亮点在于内存限制1MB.明显不能再用数组储存了,肯定是用 ...
- HDU6621 K-th Closest Distance 第 k 小绝对值(主席树(统计范围的数有多少个)+ 二分 || 权值线段树+二分)
题意:给一个数组,每次给 l ,r, p, k,问区间 [l, r] 的数与 p 作差的绝对值的第 k 小,这个绝对值是多少 分析:首先我们先分析单次查询怎么做: 题目给出的数据与多次查询已经在提示着 ...
- 时光煮雨 Unity3D让物体动起来③—UGUI DoTween&Unity Native2D实现
本文首发蛮牛,次发博客园.接系列 第一篇,第二篇,本文为第三篇,再次感谢“武装三藏”在前两篇无私且精彩的问题解答 写在最前,时光煮雨,为了怀念 以下引用曾今读过的一些教程文章 其实这3种动画都有它特定 ...
- JS学习之路,之弹性运动框架
弹性运动:顾名思义,就如同物理中的加速减速运动,当开始时速度过大,到达终点时,速度不会立刻停下,而是再前进一段距离,而后再向相反方向运动,如此往复. var timer=null; var speed ...
- OpenCL中的half与float的转换
在kernel中使用half类型可以在牺牲一定精度的代价下来提升运算速度. 在kernel中, 可以比较方便的对half数据进行计算, 但在host上的, 对half的使用就没那么方便了. 查看cl_ ...
- 2018-计算机系机试(第二批)-E-绝对值排序
单点时限: 2.0 sec 内存限制: 256 MB 输入 n 个整数,按照绝对值从大到小排序.绝对值相等的整数按照整数值从小到大排序. 例如:3 个整数 -2,2 和 -6 的排序结果为 -6, - ...
- Unity shader 官网文档全方位学习(一)
转载:https://my.oschina.net/u/138823/blog/181131 摘要: 这篇文章主要介绍Surface Shaders基础及Examples详尽解析 What?? Sha ...
- poj 3977 子集
题目 题意:在一个集合中找到一个非空子集使得这个子集元素和的绝对值尽量小,和绝对值相同时保证元素个数尽量小 分析:1.二分枚举的思想,先分成两个集合: 2.枚举其中一个集合中所有的子集并且存到数组中, ...
- Java 8 ArrayList 详解
GitHub Page: http://blog.cloudli.top/posts/Java-ArrayList/ ArrayList 继承于 AbstractList ,实现了 List.Rand ...
随机推荐
- SpringBoot日记——Spring的安全配置-登录认证与授权
安全是每个项目开发中都需要考虑的,比如权限控制,安全认证,防止漏洞攻击等. 比较常见的安全框架有:Apache的shiro.Spring Security等等,相信用shiro的用户群体更多,而sec ...
- Spark Streaming简介及原理
简介: SparkStreaming是一套框架. SparkStreaming是Spark核心API的一个扩展,可以实现高吞吐量的,具备容错机制的实时流数据处理. 支持多种数据源获取数据: Spark ...
- NTP系统时间同步-操作记录
在初始化一台linux服务器后,发现这台服务器的时间不对[root@dev ~]# date2016年 10月 11日 星期二 07:04:34 CST Linux时钟分为系统时钟 (System C ...
- B. Vasya and Isolated Vertices
链接 [http://codeforces.com/contest/1065/problem/B] 题意 给你n个点,m条边,让你找最多孤立点和最少孤立点,不能有自环路 分析 对于最少max(0,n- ...
- 《Linux内核分析》第六周学习笔记
<Linux内核分析>第六周学习笔记 进程的描述和创建 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现
基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...
- 关于QQ的NABCD模型
组名:思甜雅 关于QQ的NABCD模型 N--Need 随着电脑的普及,人们需要在网络上进行交流,现有的交流工具不够完善,不能够全部满足人们对于交流沟通中的需要. 初步了解人们的需求,人们需要一款可以 ...
- Linux环境C程序设计
Linux基础 常用shell命令 命令 说明 命令 说明 man 查看联机帮助 ls 查看目录及文件列表 cp 复制目录或文件 mv 移动目录或文件 cd 改变文件或目录 rm 删除文件或目录 mk ...
- Practice2 结对子之“小学四则运算”
开发环境:Eclipse,js,css,html 程序完成的方向: 1.可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号.如: 2*(-4) = ...
- HDOJ2025_查找最大元素
一道简单题 HDOJ2025_查找最大元素 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #incl ...