CSU-ACM2017暑假集训2-二分搜索 A
来源:互联网 发布:怎么修改tomcat的端口 编辑:程序博客网 时间:2024/06/03 15:21
A - Can you find it?
Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate if you can find the three numbers Ai, Bj, Ck, which satisfy the formula Ai+Bj+Ck = X.
Input
There are many cases. Every data case is described as followed: In the first line there are three integers L, N, M, in the second line there are L integers represent the sequence A, in the third line there are N integers represent the sequences B, in the forth line there are M integers represent the sequence C. In the fifth line there is an integer S represents there are S integers X to be calculated. 1<=L, N, M<=500, 1<=S<=1000. all the integers are 32-integers.
Output
For each case, firstly you have to print the case number as the form "Case d:", then for the S queries, you calculate if the formula can be satisfied or not. If satisfied, you print "YES", otherwise print "NO".
Sample Input
3 3 31 2 31 2 31 2 331410
Sample Output
Case 1:NOYESNO
有三个vector,每个vector的元素可达500个,如果直接枚举,O(n^3)这样的复杂度肯定会超时,于是将前两个vector加起来,得到 vecG ,第三个vector是 vecC 。
显然,对于 vecC 、vecG 中的元素 vecC[i] 和 vecG[j] ,以及每个令等式成立的的 X (记为
由公式可知,对所有给出的 X ,只要使用binary_search()判断 vecG 中是否存在 X - vecC[j] 这个值,就可以知道这个 X 是不是可以由三个容器中的值组合得到。这样一来,复杂度将为O(n^2),来自求vecG的步骤。
#include <iostream>#include <vector>#include <algorithm>#include <cstdio>using namespace std;int main(){ int l, n, m, t = 1; while(cin >> l >> n >> m){ int temp; vector<int> vecA, vecB, vecC, vecS, vecG; for(int i = 0; i < l; i++){ scanf("%d", &temp); vecA.push_back(temp); } for(int i = 0; i < n; i++){ scanf("%d", &temp); for(int j = 0; j < l; j++){ vecB.push_back(temp + vecA[j]); } } sort(vecB.begin(), vecB.end()); for(int i = 0; i < vecB.size(); i++){ if(!binary_search(vecG.begin(), vecG.end(), vecB[i])) vecG.push_back(vecB[i]); } for(int i = 0; i < m; i++){ scanf("%d", &temp); vecC.push_back(temp); } int s; cin >> s; cout << "Case " << t++ << ":" << endl; for(int i = 0 ;i < s; i++){ scanf("%d", &temp); int j; for(j = 0; j < vecC.size(); j++){ if(binary_search(vecG.begin(), vecG.end(), temp - vecC[j])){ cout << "YES" << endl; break; } } if(j == vecC.size()) cout << "NO" << endl; } } return 0;}
阅读全文
0 0
- CSU-ACM2017暑假集训2-二分搜索 A
- csu-acm2017暑假集训2-二分搜索D
- CSU-ACM2017暑假集训2-二分搜索 hdu2119
- CSU-ACM2017暑假集训2-二分搜索 F
- CSU-ACM2017暑假集训2-二分搜索 E
- CSU-ACM2017暑假集训2-二分搜索 poj3104-drying
- CSU-ACM2017暑假集训2-二分搜索 D
- Monthly Expense--CSU-ACM2017暑假集训2-二分搜索
- CSU-ACM2017暑假集训2-二分搜索 C
- CSU-ACM2017暑假集训比赛2 A
- CSU-ACM2017暑假集训2-二分搜索 hdu2141- Can you find it?
- CSU-ACM2017暑假集训2-二分搜索 poj-2785-4 Values whose Sum is 0
- CSU-ACM2017暑假集训2-二分搜索 poj-32732 Monthly Expense
- CSU-ACM2017暑假集训2-二分搜索 poj-2456 Aggressive cows-最大化最小值
- Can you find it? --CSU-ACM2017暑假集训2-二分搜索
- Can you solve this equation?--CSU-ACM2017暑假集训2-二分搜索
- 4 Values whose Sum is 0 --CSU-ACM2017暑假集训2-二分搜索
- CSU-ACM2017暑假集训2-二分搜索 poj-3258- River Hopscotch
- HDU 3699(J) ——A hard Aoshu Problem(DFS暴力搜索)
- python爬虫学习第一天
- 第二章(java内存区域与内存溢出异常)
- 面向对象(类与对象———重点!!!
- 字符串的旋转
- CSU-ACM2017暑假集训2-二分搜索 A
- 我只是尝试发一篇而已
- 了解SQLServer中varchar(max)、nvarchar(max)和varbinary(max)
- C# 钉钉--网站应用钉钉扫码登录开发(C# asp.net)
- Android大图片背景性能优化篇
- Java内存区域类型
- 无线视频监控Mjpg-streamer输出分析
- B树(B-树)、B+树、B*树
- python面向对象中的类