http://acm.zzuli.edu.cn/problem.php?id=1785

学渣的逆袭

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 82  Solved: 21

SubmitStatusWeb Board

Description

老师在黑板上写了四个数列a,b,c,d,数列a,b,c,d分别有i,j,k,l个数,突然间老师很生气的把正在睡觉的豆子喊了起来,问:“这是你第x次上课睡觉了!现在给你个赎罪的机会,你从每个数列中选择一个数,有多少种选法使他们的和为x?”,豆子实在太慌乱了,小伙伴们能告诉豆子正确答案吗?

Input

第一行有四个整数i,j,k,l(1<=i,j,k,l<=500),第二行有i个数a1,a2...ai,第三行有j个数b1,b2...bj,第四行有k个数c1,c2...ck,第五行有l个数d1,d2...dl。第六行有一个数m,接下来m行询问,每行有一个数字x。(m<=10),(|x|<10^10),(|a|,|b|,|c|,|d|<=10^8)

Output

输出有m行,每行输出一个x对应的答案。

Sample Input

2 2 2 2
1 2
3 4
5 6
7 8
3
7
16
17

Sample Output

0
1
4
 
代码很容易看懂, 因为就是一个暴力的题, 加了些优化, 但时间快了不少, 优化的力量是强大的呀,可惜我却不怎么懂优化, 慢慢学吧!!!
 
 
 
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std; const int N = ; int a[N], b[N], c[N], d[N];
int v1[N*N], v2[N*N]; int main()
{
int A, B, C, D; while(scanf("%d%d%d%d", &A, &B, &C, &D)!=EOF)
{
int i, j, ans1=, ans2=, m, x; for(i=; i<A; i++) scanf("%d", &a[i]);
for(i=; i<B; i++) scanf("%d", &b[i]);
for(i=; i<C; i++) scanf("%d", &c[i]);
for(i=; i<D; i++) scanf("%d", &d[i]); for(i=; i<A; i++)
for(j=; j<B; j++)
v1[ans1++] = a[i] + b[j];
for(i=; i<C; i++)
for(j=; j<D; j++)
v2[ans2++] = c[i] + d[j]; sort(v1, v1+ans1);
sort(v2, v2+ans2); scanf("%d", &m); while(m--)
{
long long sum=;
scanf("%d", &x); for(i=; i<ans1; i++)
{
int w = x - v1[i];
int l, r;
if(binary_search(v2, v2+ans2, w))
{
l = lower_bound(v2, v2+ans2, w) - v2;
r = upper_bound(v2, v2+ans2, w) - v2;
sum += r-l;
}
}
printf("%lld\n", sum);
}
}
return ;
}
#include<cstdio>
#include<cstring>
#include<stack>
#include<vector>
#include<queue>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int oo = 0x3f3f3f3f;
const int maxn = 1e4+;
const int mod = ;
typedef long long LL;
int a[maxn], b[maxn], c[maxn], d[maxn];
LL ans;
void init(int &m, int o[], int n, int val)
{
m = lower_bound(o, o+n, val)-o;
if(o[m] > val || m == n) m--;
}
int main()
{
int i, j, q, w, e, r, m, x, k;
int z, s, v;
while(~scanf("%d %d %d %d", &q, &w, &e, &r))
{
for(i = ; i < q; i ++) scanf("%d", &a[i]);
for(i = ; i < w; i++)scanf("%d", &b[i]);
for(i = ; i < e; i++) scanf("%d", &c[i]);
for(i = ; i < r; i++)scanf("%d", &d[i]);
sort(a, a+q); sort(b, b+w);
sort(c, c+e); sort(d, d+r);
scanf("%d", &m);
while(m--)
{
scanf("%d", &x);
ans = ;
init(z, a, q, x); init(s, b, w, x); init(v, c, e, x);
for(i = ; i <= z; i ++)
{
if(a[i] > x) break;
for(j = ; j <= s; j ++)
{
if(a[i]+b[j] > x) break;
for(k = ; k <= v; k++)
{
if(a[i]+b[j]+c[k] > x) break;
int v = x-a[i]-b[j]-c[k];
if(binary_search(d, d+r, v))ans++;
}
}
}
printf("%lld\n", ans);
}
}
return ;
} /**************************************************************
Problem: 1785
User: 2759894160
Language: C++
Result: Accepted
Time:1667 ms
Memory:1032 kb
****************************************************************/
 
 

(暴力+优化)学渣的逆袭 -- zzuli -- 1785的更多相关文章

  1. 中小公司的Java工程师应该如何逆袭冲进BAT?

    (1)80% Java工程师都有的迷茫 这篇文章,跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师应该如何规划准备,才能跳槽进入BAT这类一线互联网公司? 之所以我用了三个 “很多” ...

  2. 小X的逆袭

    [问题描述]毕业于普通本科的小x 一直自称是资深屌丝.谁又能想到,如此不起眼的小x 在历经重重面试环节后,竟然如愿以偿加入了心仪已久的腾讯公司!正所谓野百合也有春天,屌丝也有逆袭的那一天!一段时间以后 ...

  3. 《逆袭团队》第九次团队作业【Beta】Scrum meeting 3

    项目 内容 软件工程 任课教师博客主页链接 作业链接地址 团队作业9:Beta冲刺与团队项目验收 团队名称 逆袭团队 具体目标 (1)掌握软件黑盒测试技术:(2)学会编制软件项目总结PPT.项目验收报 ...

  4. 《逆袭团队》第九次团队作业【Beta】Scrum meeting 2

    项目 内容 软件工程 任课教师博客主页链接 作业链接地址 团队作业9:Beta冲刺与团队项目验收 团队名称 逆袭团队 具体目标 (1)掌握软件黑盒测试技术:(2)学会编制软件项目总结PPT.项目验收报 ...

  5. 面渣逆袭:Java集合连环三十问

    大家好,我是老三.上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好! 围观群众纷纷表示 不写,是不可能不写的,只有卷才能维持了生活这样子. 当然,我写的这一系列,不是背诵版,是理解版,很 ...

  6. 面渣逆袭:JVM经典五十问,这下面试稳了!

    大家好,我是老三,"面渣逆袭"系列继续,这节我们来搞定JVM.说真的,JVM调优什么的一个程序员可能整个职业生涯都碰不到两次,但是,一旦用到的时候,那就是救命了,而且最重要的是-- ...

  7. 面渣逆袭:Java并发六十问,快来看看你会多少道!

    大家好,我是老三,面渣逆袭 继续,这节我们来盘一盘另一个面试必问知识点--Java并发. 这篇文章有点长,四万字,图文详解六十道Java并发面试题.人已经肝麻了,大家可以点赞.收藏慢慢看!扶我起来,我 ...

  8. 面渣逆袭:Java基础五十三问,快来看看有没有你不会的!

    大家好,我是老三, 面渣逆袭 系列继续.这节我们回到梦开始的地方--Java基础,其实过了萌新阶段,面试问基础就问的不多,但是保不齐突然问一下.想一下,总不能张口高并发.闭口分布式,结果什么是面向对象 ...

  9. 面渣逆袭:二十二图、八千字、二十问,彻底搞定MyBatis!

    大家好,我是老三,面渣逆袭系列继续,这节我们的主角是MyBatis,作为当前国内最流行的ORM框架,是我们这些crud选手最趁手的工具,赶紧来看看面试都会问哪些问题吧. 基础 1.说说什么是MyBat ...

随机推荐

  1. MVC和Web API的区别

    最近几次面试时碰到过面试官提问这个问题.我一开始觉得这两个根本没有可比性,其中有一位面试官说,有不同啊,比如继承的基类不同,webapi继承的事APIController,等等. 今天我就总结一下,其 ...

  2. Oracle_高级功能(6) 分区

    oracle分区表1.分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区. 表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上 ...

  3. PAT 1050 螺旋矩阵(25)(代码)

    1050 螺旋矩阵(25)(25 分) 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方 ...

  4. Numpy 基础运算

    numpy的几种运算 1.一维矩阵运算 >>> import numpy as np >>> a=np.array([10,20,30,40]) # array([ ...

  5. 修改别人写的Hibernate数据库操作代码

    最近正在维护别人写的一个关于Hibernate操作数据库的项目,在运行测试的时候(向表中插入记录),报了一个错误:cannot insert a null into column(XXX字段名,下文统 ...

  6. UISwitch开关控件属性介绍以及获取开关状态并做出响应

    (1)UISwitch的大小也是固定的,不随我们frame设置的大小改变:也是裁剪成圆角的,设置背景就露马脚发现背景是矩形. (2)UISwitch的背景图片设置无效,即我们只能设置颜色,不能用图片当 ...

  7. SQL Server 2008数据库连接错误

    以Windows身份连接SQL Server 2008数据库时,连接不上,出现如下报错画面: 解决办法:打开services窗口,找到名字类似于SQL Server (xxx)的服务,启动服务. 注: ...

  8. list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作

    list,set等集合遍历时,不能remove集合中的元素.需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAl ...

  9. Linq去重 不用实现IEqualityComparer接口的方法超级简单

    RskFactorRelation.Instance.GetCache<RskFactorRelation>(true).Where(x => !string.IsNullOrEmp ...

  10. [转载]How To Install Nginx And PHP-FPM On CentOS 6 Via Yum

    http://www.lifelinux.com/how-to-install-nginx-and-php-fpm-on-centos-6-via-yum/ http://blog.csdn.net/ ...