Codeforces Round #Pi (Div. 2)
2015-08-07 17:16
260 查看
A. Lineland Mail (567A Lineland Mail)
题目描述:
给出n个升序排列的数,问每个数与除自身之外的n-1个数的绝对值最大和最小分别是什么?
解题思路:
因为给出的序列已经排好序了,对于每个数绝对值最小的肯定是左右相邻的两个数的绝对值取最小啦,绝对值最大就是和第一个数或者最后一个数的绝对值取最大咯,第一个数和最后一个数特殊处理一下就好啦。
View Code
题目描述:
给出n个升序排列的数,问每个数与除自身之外的n-1个数的绝对值最大和最小分别是什么?
解题思路:
因为给出的序列已经排好序了,对于每个数绝对值最小的肯定是左右相邻的两个数的绝对值取最小啦,绝对值最大就是和第一个数或者最后一个数的绝对值取最大咯,第一个数和最后一个数特殊处理一下就好啦。
#include <bits/stdc++.h> using namespace std; const int maxn = 200005; int shot1[maxn], shot2[maxn]; int n, m, a, k; int solve (int x) { for (int i=1; i<=x; i++) shot2[i] = shot1[i]; int ans = 0; shot2[0] = 0; shot2[x+1] = n+1; sort (shot2, shot2+x+2); for (int i=1; i<=x+1; i++) ans += (shot2[i] - shot2[i-1]) / (a + 1); return ans; } int main () { while (scanf ("%d %d %d", &n, &k, &a) != EOF) { scanf ("%d", &m); for (int i=1; i<=m; i++) scanf ("%d", &shot1[i]); int low = 1, high = m, mid, res = n + 1; while (low <= high) { mid = (low + high) / 2; int ans = solve (mid); if (ans >= k) low = mid + 1; else { high = mid - 1; res = min (res, mid); } } if (res == n+1) res = -1; printf ("%d\n", res); } return 0; }
View Code
相关文章推荐
- leetcode - Sort Colors
- “出轨照”背后的真相:防骗启示录之相册病毒报告
- 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法
- JavaEE拾遗01--异步上传文件
- Date和Calendar
- 上拉电阻下拉电阻的总结
- 自动取款机 银行铁路机器操作指南
- bzoj2118
- Android Studio配置OpenCV开发环境
- oc中的内存管理的初步
- 一个QT 3D转动控件
- c# ros
- HDU 5360 Hiking(2015多校联合)
- bzoj2118 分类: bzoj 2015-08-07 17:15 78人阅读 评论(0) 收藏
- 嵌入式中通讯协议的设计(转)
- echarts 点击事件
- UnityShader实例11:积雪材质
- 【Android应用开发技术:用户界面】自定义View类设计
- 也谈不甘
- 静帧效果图——Maya的节点材质案例