POJ 2549 二分+HASH
题目链接:http://poj.org/problem?id=2002
题意:给定一个n个数字组成的序列,然后求出4个数使得a+b+c=d,求d的最大值。其中a,b,c,d要求是给定序列的数,并且不能重复拿同一个位置的数。
思路:先处理a+b,把a+b的组合和在序列的位置存起来。然后枚举d,c计算d-c时候在a+b中出现过。并且a.b.c.d在序列的位置都不同。注意结果可能爆int。
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
typedef long long int LL;
typedef unsigned int uint;
#define mp(x,y) make_pair(x,y)
#define INF 536870920
const int MAXN=+;
struct Node{
int idx,idy;
LL val;
}Hash[MAXN*MAXN];
LL num[MAXN];int cnt;
bool cmp(Node a,Node b){
return a.val<b.val;
}
bool search(LL V,int x,int y){
int L=,R=cnt-,Mid;
while(R>=L){
Mid=(L+R)/;
if(Hash[Mid].val>=V){
R=Mid-;
}
else{
L=Mid+;
}
}
for(int i=L;Hash[i].val==V;i++){
if((Hash[i].idx!=x&&Hash[i].idy!=y)&&(Hash[i].idx!=y&&Hash[i].idy!=x)){
return true;
}
}
return false;
}
int main(){
#ifdef kirito
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int n;
while(scanf("%d",&n)&&n){
LL ans=-INF; cnt=;
for(int i=;i<n;i++){
scanf("%I64d",&num[i]);
}
for(int i=;i<n;i++){
for(int j=i+;j<n;j++){ //make a+b
Hash[cnt].idx=i; Hash[cnt].idy=j;
Hash[cnt++].val=num[i]+num[j];
}
}
sort(Hash,Hash+cnt,cmp);
for(int i=;i<n;i++){
for(int j=;j<n;j++){
if(i==j){
continue;
}
LL V=num[i]-num[j]; //d-c
if(search(V,i,j)){ //d-c in a+b ?
ans=max(ans,num[i]);
}
}
}
if(ans==-INF){
printf("no solution\n");
}
else{
printf("%I64d\n",ans);
}
}
return ;
}
POJ 2549 二分+HASH的更多相关文章
- UVA 10125 - Sumsets(POJ 2549) hash
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- POJ 2549 Sumsets hash值及下标
题目大意:找到几何中的4个数字使他们能够组成 a+b+c=d , 得到最大的d值 我们很容易想到a+b = d-c 那么将所有a+b的值存入hash表中,然后查找能否在表中找到这样的d-c的值即可 因 ...
- BZOJ 1014: [JSOI2008]火星人prefix [splay 二分+hash] 【未完】
1014: [JSOI2008]火星人prefix Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6243 Solved: 2007[Submit] ...
- BZOJ1014: [JSOI2008]火星人prefix(splay 二分 hash)
题意 题目链接 Sol 一眼splay + 二分hash,不过区间splay怎么写来着呀 试着写了两个小时发现死活不对 看了一下yyb的代码发现自己根本就不会splay.... // luogu-ju ...
- 【bzoj3796】Mushroom追妹纸 Kmp+二分+Hash
题目描述 给出字符串s1.s2.s3,找出一个字符串w,满足: 1.w是s1的子串: 2.w是s2的子串: 3.s3不是w的子串. 4.w的长度应尽可能大 求w的最大长度. 输入 输入有三行,第一行为 ...
- BZOJ4698: Sdoi2008 Sandy的卡片(二分 hash)
题意 题目链接 Sol 用什么后缀数组啊 直接差分之后 二分+hash找最长公共子串就赢了啊... 时间复杂度:\(O(nlogn)\)(不过我写的是两个log..反正也能过) // luogu-ju ...
- POJ - 2018 二分+单调子段和
依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个 ...
- UVA12206 Stammering Aliens 【SAM 或 二分 + hash】
题意 求一个串中出现至少m次的子串的最大长度,对于最大长度,求出最大的左端点 题解 本来想练哈希的,没忍住就写了一个SAM SAM拿来做就很裸了 只要检查每个节点的right集合大小是否不小于m,然后 ...
- 【BZOJ1414/3705】[ZJOI2009]对称的正方形 二分+hash
[BZOJ1414/3705][ZJOI2009]对称的正方形 Description Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究.最近,Orez又得到了一些数据,并已经把它们 ...
随机推荐
- css实现图片闪光效果
1.这个效果是看到京东商城上的一个下效果,原本的思路是 用js控制一个图片在某张需要闪光的图片上重复出现,但是 网上找了一些资料,竟然是用css写的,真是太帅了!!! 2.原理:在需要闪光的图片前添加 ...
- mybatis,批量新增、修改,删除
转载自:http://blog.csdn.net/sanyuesan0000/article/details/19998727 最近需要用到Mybatis批量新增oracle数据库,刚开始在网上找到的 ...
- 【编程之美】2.5 寻找最大的k个数
有若干个互不相等的无序的数,怎么选出其中最大的k个数. 我自己的方案:因为学过找第k大数的O(N)算法,所以第一反应就是找第K大的数.然后把所有大于等于第k大的数取出来. 写这个知道算法的代码都花了2 ...
- iOS MRC ARC 内存管理
转自:http://www.jianshu.com/p/48665652e4e4 1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用 ...
- Genesis不能运行Perl编译后的脚本
我们经常会遇到Genesis2000中C-shell的脚本不能正常运行的问题,而同样的程序在其它电脑上又可以正常运行,如果你能看看Genesis后台窗口,也就是后面那个黑乎乎的窗口(所谓的小DOS窗口 ...
- Android WebView 拦截自定义协议
URL 语法 URL由三部分组成:资源类型.存放资源的主机域名.资源文件名. URL的一般语法格式为: (带方括号[]的为可选项): protocol :// hostname[:port] / pa ...
- HTML5学习之视频与音频(三)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Android请求服务器的两种方式--post, get的区别
android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...
- 【JAVA反射机制】
一.Class类 Java.lang.Object |-java.lang.Class<T> 构造方法:无. 常用方法: static Class<?> forName(Str ...
- phpcms标签使用 —— 系统常量
以下系统常量全局可用 1 2 3 4 5 6 7 8 9 10 11 12 13 CACHE_PATH 缓存文件夹地址 SITE_PROTOCOL 主机协议 SITE_URL 当前访问的主机名 HTT ...