题目链接:http://poj.org/problem?id=2785

大意是输入一个n行四列的矩阵,每一列取一个数,就是四个数,求有多少种着四个数相加和为0的情况

首先脑海里想到的第一思维必然是一个个枚举,用四个for循环,那时间复杂度变成了On4,n的最大值是4000.

肯定会超时。那么,为了简化时间,首先我们可以开两个至少4000*4000的数组分别把第一列与第二列的和的情况

,第三列与第四列的和的情况存起来。这样就只用考虑两个数组的情况。

然后把两个数组排序,一个数组从头部开始同时另一个数组从尾部开始讨论和为0的情况(利用了递增性质和递减性质)

 #include<cstdio>
#include<algorithm>
using namespace std;
int a[],b[],c[],d[];
int ab[*+],cd[*+];
int main()
{
int n,i,j,k,num,sum,x;
while (~scanf("%d",&n))
{
for (i=;i<n;i++)
scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]);
k=;
for (i=;i<n;i++){
for (j=;j<n;j++)
ab[k++]=a[i]+b[j];
}
k=;
for (i=;i<n;i++){
for (j=;j<n;j++)
cd[k++]=c[i]+d[j];
}
sort(ab,ab+n*n);
sort(cd,cd+n*n);
x=n*n-;sum=;
for (i=;i<n*n;i++)
{
while (x>=&&ab[i]+cd[x]>)
x--;
if (x<)
break;
num=x;
while (ab[i]+cd[num]==&&num>=)
{
sum++;
num--;
}
}
printf("%d\n",sum);
}
return ;
}

二分也很简单,找到相等个数就行

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[],b[],c[],d[];
int ab[*+],cd[*+];
int k2;
int check(int x)
{
int left=,right=k2-,mid;
while (left<=right)
{
mid=(left+right)/;
if (x==cd[mid])
{
int w=,e=mid;
while (x==cd[e]&&e<k2)
e++,w++;
e=mid-;
while (x==cd[e]&&e>)
e--,w++;
return w;
}
else if (x<cd[mid])
right=mid-;
else
left=mid+;
}
return ;
}
int main()
{
int t,i,j,q;
while (~scanf("%d",&t))
{
for (i=;i<=t;i++)
scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]);
memset(ab,,sizeof(ab));
memset(cd,,sizeof(cd));
int k1=,sum=;
k2=;
for (i=;i<=t;i++)
{
for (j=;j<=t;j++)
{
ab[k1++]=a[i]+b[j];
cd[k2++]=-(c[i]+d[j]);
}
}
sort(cd+,cd+k2);
for (i=;i<k1;i++)
sum+=check(ab[i]);
printf("%d\n",sum);
}
return ;
}

poj 2785 让和为0 暴力&二分的更多相关文章

  1. [51nod] 1267 4个数和为0 暴力+二分

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...

  2. [51nod] 1090 3个数和为0 暴力+二分

    给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...

  3. poj3977 - subset - the second time - 暴力 + 二分

    2017-08-26 11:38:42 writer:pprp 已经是第二次写这个题了,但是还是出了很多毛病 先给出AC代码: 解题思路: 之前在培训的时候只是笼统的讲了讲怎么做,进行二分对其中一边进 ...

  4. POJ 2723 Get Luffy Out(2-SAT+二分答案)

    Get Luffy Out Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8851   Accepted: 3441 Des ...

  5. POJ 2785 4 Values whose Sum is 0 (二分)题解

    思路: 如果用朴素的方法算O(n^4)超时,这里用折半二分.把数组分成两块,分别计算前后两个的和,然后枚举第一个再二分查找第二个中是否有满足和为0的数. 注意和有重复 #include<iost ...

  6. POJ - 2785 4 Values whose Sum is 0 二分

    4 Values whose Sum is 0 Time Limit: 15000MS   Memory Limit: 228000K Total Submissions: 25615   Accep ...

  7. POJ - 2785 - 4 Values whose Sum is 0 - 二分折半查找

    2017-08-01 21:29:14 writer:pprp 参考:http://blog.csdn.net/piaocoder/article/details/45584763 算法分析:直接暴力 ...

  8. POJ 2785:4 Values whose Sum is 0 二分

    4 Values whose Sum is 0 Time Limit: 15000MS   Memory Limit: 228000K Total Submissions: 18221   Accep ...

  9. 4 Values whose Sum is 0 POJ - 2785(二分应用)

    题意:输入一个数字n,代表有n行a,b,c,d,求a+b+c+d=0有多少组情况. 思路:先求出前两个数字的所有情况,装在一个数组里面,再去求后两个数字的时候二分查找第一个大于等于这个数的位置和第一个 ...

随机推荐

  1. Resize CentOS Linux hard drive partition (centos 6.3 调整LVS磁盘大小)

    查看当前磁盘信息: [root@localhost ~]# df -h 文件系统          容量  已用  可用 已用%% 挂载点/dev/mapper/VolGroup-lv_root    ...

  2. SQL Server GROUP BY 后 拼接 字符串

    原文地址:https://blog.csdn.net/u010673842/article/details/79637618 select ID, ,,'') from class a group b ...

  3. 吴裕雄 22-MySQL 事务

    MySQL 事务MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据 ...

  4. HTML 视频

    在html5中使用视频,只要添加元素<video></video>元素表示. <video>有几个属性: src 指定音频文件的路径 poster 视频播放之前显示 ...

  5. python 2.0 与 python 3.0 区别

    区别一:           python 2.0 : 源码不规范,重复代码很多 python 3.0 : 源码精简,美观.优雅 区别二: PY2 : 有整型int.长整型long. py3:只有整型 ...

  6. Struts 框架

    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...

  7. linux配置虚拟主机

    linux 下怎么配置虚拟主机 linux 下怎么配置虚拟主机,在网上找到N个资料都是高手们随便说几句,都没怎么说清楚.问题:  我把域名(bs.jxiop.com)指向了 68.10.140.10 ...

  8. vl_sift函数用法

    I = vl_impattern('roofs1') ; image(I) ; %vl_sift函数的输入是一个单精度的灰度图像,灰度值区间归一化到[, ]. %因此图像 I 需要通过下面的函数转成相 ...

  9. flume 实际的使用

    1.No configuration found for this host:seqGenSrc bin/flume-ng agent --conf conf --conf-file conf/flu ...

  10. zabbix 利用python脚本实现短信告警

    一.编写脚本 cd /usr/local/zabbix-4.0.3/share/zabbix/alertscripts vi zabbix_sms.py 内容如下: #!/usr/bin/python ...