sicily 1375 Balanced lineup
来源:互联网 发布:瑙鲁域名 编辑:程序博客网 时间:2024/06/16 21:10
题目地址:http://soj.me/1375
题目分类中说是要考察的哈希的,但是我却没看出怎么要考察哈希,我的想法是把Id(原文中id为0和1,为了统计数量一样把0转为-1,这样只要他们的和为0,就表示一样多了)和x坐标封装成一个结构体,然后按坐标对结构体进行排序,接着以每个点为起点,找到和为0的那一段的横坐标相差的最大值(PS:要找和为0的那一段,可以求出前缀和sum[i],如果sum[i] = sum[j],则i~j这一段的和为0,如果求出了前缀和,只需O(n)的时间就可以找出j-i的最大值,请参考这里:http://soj.me/viewsource.php?sid=1278111,看了代码之后,发现这种做法可能会出现溢出,但的确不失为一种好方法),附上我的O(n^2)复杂度的代码吧:
#include <iostream>#include <algorithm>#define MAX 50001using namespace std;struct Node { int ps; int value;};Node array[MAX];int sum[MAX] = {0};int max_[MAX] = {0};bool cmp(Node a, Node b) { return a.ps < b.ps;}int main() { int n; cin >> n; for (int i = 0; i < n; i++) { int value_, ps_; cin >> value_ >> ps_; if (value_) array[i].value = value_; else array[i].value = -1; array[i].ps = ps_; } sort(array, array+n, cmp); for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { sum[i] += array[j].value; if (sum[i] == 0) max_[i] = array[j].ps - array[i].ps; } } int m = -100000; for (int i = 0; i < n; i++) if (m < max_[i]) m = max_[i]; cout << m << endl; //stem("pause"); return 0;}
0 0
- Sicily 1375--- Balanced lineup
- sicily 1375 Balanced lineup
- sicily 1375 Balanced lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- PKU3274 Gold Balanced Lineup
- pku 3264Balanced Lineup
- POJ 3264 Balanced Lineup
- PKU3264 balanced lineup
- POJ 3264 Balanced Lineup
- 3264 Balanced Lineup //rmq
- POJ3264 Balanced Lineup
- 拒绝搜索失联飞机是否入境
- UIWebView加载缓存的4种方式
- C#中const和readonly和static readonly区别
- 展讯笔试题
- zoj1041 Transmitters (叉积性质的应用)
- sicily 1375 Balanced lineup
- tomcate安装后启动错误
- [蓝桥杯历届题目] 黄金队列
- eclipse配置tomcat
- inno 打包程序设置管理员权限
- DIV CSS鼠标经过悬停在图片上时图片上方显示文字
- 例题2.2—例题2.4
- Asp.net Ajax(二) UpdatePanel(一)UpdatePanel中使用Validators
- 弹出(保存成功)为悬浮框,一秒之后消失