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
HINT

时间给了3s,还是挺多的,枚举+二分就可以了。

写了三个,一直在优化时间最后终于优化到1s以内了O(∩_∩)O~~。

第一个1800ms。。

#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+7;
const int mod = 998244353;
typedef long long LL;
int a[maxn], b[maxn], c[maxn], d[maxn];
LL ans;
int main()
{int i, j, q, w, e, r, m, x, k;while(~scanf("%d %d %d %d", &q, &w, &e, &r)){ans = 0;for(i = 0; i < q; i ++) scanf("%d", &a[i]);for(i = 0; i < w; i++)scanf("%d", &b[i]);for(i = 0; i < e; i++) scanf("%d", &c[i]);for(i = 0; 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 = 0;for(i = 0; i < q; i ++){if(a[i] > x) break;for(j = 0; j < w; j ++){if(a[i]+b[j] > x) break;for(k = 0; k < e; 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 0;
}/**************************************************************Problem: 1785User: 2759894160Language: C++Result: AcceptedTime:1858 msMemory:1032 kb
****************************************************************/

第二个 1600ms。。 只少了200不过聊胜于无,

#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+7;
const int mod = 998244353;
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 = 0; i < q; i ++) scanf("%d", &a[i]);for(i = 0; i < w; i++)scanf("%d", &b[i]);for(i = 0; i < e; i++) scanf("%d", &c[i]);for(i = 0; 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 = 0;init(z, a, q, x); init(s, b, w, x); init(v, c, e, x);for(i = 0; i <= z; i ++){if(a[i] > x) break;for(j = 0; j <= s; j ++){if(a[i]+b[j] > x) break;for(k = 0; 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 0;
}/**************************************************************Problem: 1785User: 2759894160Language: C++Result: AcceptedTime:1667 msMemory:1032 kb
****************************************************************/

第三个, 本来把后三个数组的所有和放到了一个新的数组里面, 不过500*500*500太大, 于是计划破产, 就放了2个500*500  500*500的。。(700ms 优雅的暴力)

#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 = 1e6+7;
const int mod = 998244353;
typedef long long LL;
int a[maxn], b[maxn], c[maxn], d[maxn];
int fir[maxn], sec[maxn];
LL ans;
int main()
{int i, j, q, w, e, r, m, x, k, cnt, cnt1;while(~scanf("%d %d %d %d", &q, &w, &e, &r)){cnt = cnt1 = ans = 0;for(i = 0; i < q; i ++) scanf("%d", &a[i]);for(i = 0; i < w; i++)scanf("%d", &b[i]);for(i = 0; i < e; i++) scanf("%d", &c[i]);for(i = 0; i < r; i++)scanf("%d", &d[i]);for(i = 0; i < q; i++)for(j = 0; j < w; j++)fir[cnt++] = a[i]+b[j];for(i = 0; i < e; i++)for(j = 0; j < r; j++)sec[cnt1++] = c[i]+d[j];sort(fir, fir+cnt); sort(sec, sec+cnt1);scanf("%d", &m);while(m--){scanf("%d", &x);ans = 0;for(i = 0; i < cnt; i++){int v = x-fir[i];int l, r;if(binary_search(sec, sec+cnt1, v)){l = lower_bound(sec, sec+cnt1, v)-sec;r = upper_bound(sec, sec+cnt1, v)-sec;ans += r-l;}}printf("%lld\n", ans);}}return 0;
}/**************************************************************Problem: 1785User: 2759894160Language: C++Result: AcceptedTime:704 msMemory:24312 kb
****************************************************************/

转载于:https://www.cnblogs.com/PersistFaith/p/4987629.html

学渣的逆袭(各种暴力~)相关推荐

  1. 《MacTalk 跨越边界》一一2.4 一个学渣的逆袭

    本节书摘来自异步社区出版社<MacTalk 跨越边界>一书中的第2章,第2.4节,作者: 池建强,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.4 一个学渣 ...

  2. 成都理工大学计算机学霸,不及格学渣如何逆袭成理科学霸

    原标题:不及格学渣如何逆袭成理科学霸 最开始我是想要放弃写下化学学习经验的,因为化学从开始到最后都给我带来了很多打击.事实上,我个人的化学学习是很失败的,以至于高考理综中化学硬是有近20分根本没有写, ...

  3. 被劝退的学渣,逆袭成高级语言之父,改变编程方式却说“不喜欢写代码”!...

    作者 | 年素清 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) 上世纪五十年代,程序员使用的是 0/1 机器语言写代码,费时费力.如何进化到如今只需轻松高效地输入字符组成不同的编 ...

  4. (转载)不断进阶:从“学渣”到P10,一位阿里工程师的逆袭故事

    云栖君导读:红雪是蚂蚁金服的研究员,带领大几百号人的技术团队,最近还入选了"全球35位35岁以下科技创新青年". 团队里都是学霸海归,每次有新人入职,他都会笑着拱拱手:学霸你好,我 ...

  5. 计算机考研 学渣逆袭上清华,学渣逆袭:曾挂科8门学分绩点1.08 考上北大研究生...

    "我与北大只差1.08",近日,西南石油大学的学生qq空间纷纷被这句话刷屏.这引起了不少网友的好奇,了解事情的真相后,大家惊叹之余更是为这句话的主人公疯狂点赞. 据悉,来自西南石油 ...

  6. 计算机学霸转板的电影,关于学渣逆袭学霸的电影有哪些

    个人觉得,学生学习首先必须要有一个持久的动力,如果没有,就要多读一些励志文章或故事来激发斗志,如果不喜欢阅读还有一个简单的办法,那就是看励志电影.高三网小编整理了四部关于学渣逆袭学霸的电影,希望大家能 ...

  7. 英语学渣如何成功逆袭?聊聊我获得海外工作的真实经历

    今天我想和大家分享一下作为一个英语学渣,我是如何成功找到一份海外工作的.希望能够给和我有相似经历的小伙伴们一些启示.以下是兴哥一个女粉丝成功逆袭的经历,大家可以一起旁观一下她的自白. 首先,让我简单介 ...

  8. 不断进阶:从“学渣”到P10,一位阿里工程师的逆袭故事

    红雪是蚂蚁金服的研究员,带领大几百号人的技术团队,最近还入选了"全球35位35岁以下科技创新青年". 团队里都是学霸海归,每次有新人入职,他都会笑着拱拱手:学霸你好,我是个学渣,我 ...

  9. 高中成绩不好高三时可以考计算机吗,高中你遇到过学渣“逆袭”吗?成绩差,高三可以逆袭到什么程度?...

    原标题:高中你遇到过学渣"逆袭"吗?成绩差,高三可以逆袭到什么程度? 最近和同学们一起聊天的时候,有同学问我说,如果高一高二成绩不好,那么高三可以逆袭到什么程度? 逆袭最重要的是什 ...

最新文章

  1. Linux查看环境变量当前信息和查看命令
  2. scrum工具leangoo缺陷管理看板示例
  3. easypoi实现Excel导入
  4. Spring Cloud Alibaba——Nacos实现服务治理
  5. 2017sc 膜你赛9 比赛笔记
  6. Spring 解耦工厂模式
  7. 一步一步写算法(之线性结构的处理)
  8. 微服务化架构演进与人员组织
  9. 高等代数——大学高等代数课程创新教材(丘维声)——3.5笔记+习题
  10. 6款令人相见恨晚的在线搜索网站,成年后都会要用上,了解一下!
  11. java调色板代码_调色板的代码
  12. houdini中使用vex旋转对象法线方向方法
  13. linux查看服务器网络延迟,ECS Linux下的qperf测量网络带宽和延迟的具体步骤
  14. 关于微信录音的坑-Linux服务器上进行音频格式的转换
  15. P6-Vue3后台管理系统-构建业务组件连通公共组件
  16. 下载Intell IDea
  17. Linux系统调用 - 文件操作
  18. Python按照指定的分隔符拆分字符串split()函数
  19. 碰撞体速度过快穿透的问题
  20. 《那些年啊,那些事——一个程序员的奋斗史》十三

热门文章

  1. 文件和目录(二)--unix环境高级编程读书笔记
  2. 开课吧Java课堂:线程间是如何实现通信
  3. MySQL8.0.14 - 新特性 - InnoDB Parallel Read简述 1
  4. react-native开发安卓app相关使用总结
  5. AchartEngine绘图引擎
  6. Redis源码分析系列三:initServerConfig下半部分
  7. mysql connector c++与 visual studio 2012 联合使用
  8. oracle日期处理函数
  9. ImportError: dlopen: cannot load any more object with static TLS 解决
  10. SCI投稿中的简写(ADM,AE,EIC等)与状态解读