hdu 5626 Clarke and points 最大曼哈顿距离
2016-02-14 15:06
225 查看
题目:点击打开链接
题意:给n(<=10^6)个点,求两点的最远曼哈顿距离。
分析:这题和poj2926那题一样。
|xi−xj|+|yi−yj|,拆绝对值可以得到:
正正:xi−xj+yi−yj=(xi+yi)−(xj+yj)
负负:−xi+xj−yi+yj=(−xi−yi)−(−xj−yj)
正负:xi−xj−yi+yj=(xi−yi)−(xj−yj)
负正:−xi+xj+yi−yj=(−xi+yi)−(−xj+yj)
所以只要维护最大值和最小值就可以了,至于符号可以用二进制枚举
题意:给n(<=10^6)个点,求两点的最远曼哈顿距离。
分析:这题和poj2926那题一样。
|xi−xj|+|yi−yj|,拆绝对值可以得到:
正正:xi−xj+yi−yj=(xi+yi)−(xj+yj)
负负:−xi+xj−yi+yj=(−xi−yi)−(−xj−yj)
正负:xi−xj−yi+yj=(xi−yi)−(xj−yj)
负正:−xi+xj+yi−yj=(−xi+yi)−(−xj+yj)
所以只要维护最大值和最小值就可以了,至于符号可以用二进制枚举
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> using namespace std; typedef long long ll; const int N=1000000+5; #define INF 20000000000; long long seed; int n; inline long long rand(long long l, long long r) { static long long mo=1e9+7, g=78125; return l+((seed*=g)%=mo)%(r-l+1); } ll f [2]; int main() { // freopen("f.txt","r",stdin); ios_base::sync_with_stdio(0); int T; scanf("%d",&T); while(T--){ cin >> n >> seed; for (int i = 0; i < n; i++) f[i][0] = rand(-1000000000, 1000000000), f[i][1] = rand(-1000000000, 1000000000); long long ans=0; for (int k = 0; k < (1 << 2); k++){ long long a = -2000000000; long long b = 2000000000; for (int i = 0; i < n; i++) { ll temp = 0; for (int j = 0; j < 2; j++) if(k>>j &1)temp+=f[i][j]; else temp-=f[i][j]; a = max(a, temp); b = min(b, temp); } ans = max(ans, a - b); } cout<<ans<<endl; } return 0; }
相关文章推荐
- python paramiko小结
- html5
- PagerSlidingTabStrip实现网易新闻导航栏效果
- 常见文件类型识别
- poj1509 最小表示法
- 理解A*寻路算法具体过程
- 关于字符编码
- iOS 自定义Actionsheet
- 于是就来到第三节_(:зゝ∠)_运算符重载
- Win10安装KB3116869补丁提示0x80004005错误的解决办法
- Binding MySql DataSources in Jboss EAP 7.0
- 全面复习之 SQL (3)-库函数
- 第23讲-用if语句实现分支结构-练习
- Linux shell编程中IO和条件及循环处理的细节问题讨论
- 初识 C#
- leetcode83题 题解 翻译 C语言版 Python版
- netstat
- .Net 身份认证和授权问题
- zabbix监控不到主机(学习中)
- maven-生命周期与插件结合