有关一道C++编程的题目,思考一天了,但是自己的算法总是超时,希望高手给一个速度快的算法。

[复制链接]
查看11 | 回复2 | 2010-10-12 12:57:51 | 显示全部楼层 |阅读模式
卡片之和
时间限制:1000 ms|内存限制:65536 KB
描述
在看了盗一的表演后,聪明的快斗很快就明白了这个魔术背后的秘密。接着就想出了一个类似的魔术。他让老爸从那10000张卡片中抽出n张,然后盗一随便说出m个数,快斗能很快的判断出这个数是否是那n张卡片中某两个数的和。
当然,俗话说有其父必有其子,快斗同样是一个出色的软件工程师。
输入
第一行一个整数表示数据的组数(多组数据),对于每组数据第一行有两个整数 n (1 ≤ n ≤ 10000) , m (1 ≤ m ≤ 100) 。第二行是n 个互异的整数构成的集合S。第三行有 m 个待验证的整数。
输出
对于每个待验证的整数输出一行,如果集合S中存在两个整数之和为待验证的整数,输出“Yes”,否则输出“No”。
样例输入
1
10 5
3 1 8 4 7 9 5 10 2 6
27 7 26 10 11
样例输出
No
Yes
No
Yes
Yes

回复

使用道具 举报

千问 | 2010-10-12 12:57:51 | 显示全部楼层
先用快速排序对集合S从小到大进行排序,再用二分查找对第二个整数进行搜索(如果没有查到,比如上面的例子中的27,1+10n/2,如果还没有就是不存在。 补充----好用的话,别忘了给我最佳啊= =
回复

使用道具 举报

千问 | 2010-10-12 12:57:51 | 显示全部楼层
试试我这个快不快#include #include using namespace std;void sort(int* data, int count){ int temp; for(int i = count-1; i > 0; i--) {for(int j =
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行