挑战程序1.6.3(2)算法

题目:有n张纸片,随机取4张(可放回),如4张面值加起来可等于m,则输出yes,否则no。纸片的面值为k[1],k[2]……

思路:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 bool ss(int x);
 5 void solve();
 6     int n,m,r,k[500];
 7     int kk[500];
 8     bool f;
 9 int main()
10 {
11     while(scanf("%d %d",&n,&m)!=EOF)
12     {
13         for(int i=0;i<n;i++)
14             scanf("%d",&k[i]);
15         solve();
16         if(f) printf("Yes\n");
17         else printf("NO\n");
18     }
19     return 0;
20 }
21
22 void solve()
23 {
24     for(int a=0;a<n;a++)
25         for(int b=0;b<n;b++)
26         kk[a*n+b]=k[a]+k[b];
27          sort(kk,kk+n*n);
28           f=false;
29     for(int c=0;c<n;c++)
30         for(int d=0;d<n;d++)
31         if(ss(m-k[c]-k[d]))
32        {
33          f=true;
34        }
35 }
36
37 bool ss(int x)
38 {
39     int l=0;r=n*n;
40     while(r-l>=1)
41     {
42         int i=(r+l)/2;
43         if(kk[i]>x)l=i+1;
44         else if (kk[i]==x) return true;
45         else r=i;
46     }
47 }
时间: 2024-11-08 10:06:59

挑战程序1.6.3(2)算法的相关文章

程序语言的奥妙:算法解读 &mdash;&mdash;读书笔记

算法(Algorithm) 是利用计算机解决问题的处理步骤. 算法是古老的智慧.如<孙子兵法>,是打胜仗的算法. 算法是古老智慧的结晶,是程序的范本. 学习算法才能编写出高质量的程序. 懂得了算法,游戏水平会更高. 比如下棋,如果懂得棋谱,就不需要每次考虑"寻找最好的一步棋",按照棋谱 就可以走出最好的几步棋.棋谱是先人们智慧的结果,因此掌握多种棋谱的人更 容易在对弈中获得胜利. 算法的学习类似学习游戏攻略. 算法是编写好程序的"棋谱". 算法必须满足&

程序员应掌握的算法

原文:程序员必须掌握哪些算法?

程序员是否必须会算法

本章的标题既然是"程序员与算法",就必然要涉及一个基本问题,那就是"程序员是否必须会算法".这是一个充满争议的问题,虽然并不像"生存还是毁灭"之类的选择那样艰难而沉重,但也绝不是一个轻松的话题.朋友们在我的"算法系列"博客专栏上发表的评论和回复,并不都是我所期待的赞美和鼓励,也常常会有一些冷言冷语.比如,"穷举也算是算法吗"或者"请你说明一下算法在XX系统中能起到什么作用". 有一次,一

腾讯t4架构推荐:一份程序员必备的结构算法算法之道!

引言 "语言只是工具,算法才是程序的灵魂."这句话相信每一个程序员都听过无数次.然而在实际的工作中,一个产品从开发到上线,似乎哪一步都用不到数据结构与算法.于是很多程序员都有这样一种错觉:就算我不懂算法,只要语言写得溜.开发框架用得熟练.封装好的各种接口.库调用得熟练,照样能实现老板“天马行空”(傻逼)的需求,照样可以混到高薪.算法的学习,别人帮不了你多少,主要还是的靠自己悟,靠自己花时间去理解,师傅领进门,修行在个人,算法讨论,思路分享,去牛客网看看,各路大神,各种解决思路,你一定会

程序员眼中的RSA算法

RSA算法是数学应用于实际的一项伟大发明,起数学过程相对而言还是比较专业的,有兴趣可以看看. RSA算法的证明过程,详见:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 首先默认有个欧拉定理及相关的推论成立,这个要看证明过程不简单 然后看一下其加密解密的公式,可以试着推导一下: 可以看出非对称的加密解密过程,在数学上是成立的. 那么回头看它的安全性:就是要确保d不被攻破,d安全的前提是n不被成功分解. 1.能不

程序模拟洗扑克牌(算法)

前一段时间找实习,腾讯面试中一轮面试官被问到这个题目,我回答了以下解法中的第一种,太搓了.直接遭面试官歧视了,回来搜了搜,发现一种更好的解法(以下解法中的另外一种).今天偶尔发现解法2事实上有毛病.于是改进了.有了算法3和算法4. 前提:一副扑克牌有54张.因此我们能够一个整型数组array[54]或者map来存储."A"用0~3,"2"用4~7,"3"用8~11......"K"用48~51,小鬼用52,大鬼用53表示.关于

程序员训练机器学习 SVM算法分享

http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文主要阐述了SVM是如何进行工作的,同时也给出了使用Python Scikits库的几个示例.SVM作为一种训练机器学习的算法,可以用于解决分类和回归问题,还使用了kernel trick技术进行数据的转换,再根据转换信息在可能的输出之中找到一个最优的边界. [CSDN报道]支持向量机(Support

程序员必须掌握的算法有哪些?

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法.这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍.下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家.大家也可以留言区补充. 一.算法最最基础 1.时间复杂度 2.空间复杂度 一般最先

挑战程序系列

1.6二分法 1 题目:有n张纸片,随机取4张(可放回),如4张面值加起来可等于m,则输出yes,否则no.纸片的面值为k[1],k[2]-- 2 3 思路:使用4次循环寻找会导致超时,所以假设4张分别为a,b,c,d, 4 5 先计算二次循环a+b所有可能放入数组kk,然后将kk排序, 6 7 最后使用二次循环(m-c-d)与kk用二分法比较,,最后确定是否有这个值. 8 9 #include <stdio.h> 10 #include <algorithm> 11 using