摘要:
这道题太欠抽了,做了N次,每次做到一半的时候就感觉思路完全不对,然后就全删了重做。 最后这次,交上一次AC了。题目本身,分为定义和赋值两部分,其中赋值又分为左右两部分,左边的内层和右边需要递归求出值来,左边外层直接赋值即可。 这道题就是考察STL的字符串。前两天学习了Python,今天用STL的... 阅读全文
摘要:
简单版和加强版的区别就是数据范围扩大到了long long,并且加了限制条件。用IDA*算法即可解决。 #include using namespace std;typedef long long LL;LL maxd, ans[10240], v[10240];set ban;LL gcd(L... 阅读全文
摘要:
#include "iostream"#include "vector"#include "iterator"#include "ctime"#include "random"templateinline void Swap(T & a, T & b){ //交换变量 T tmp = a; a... 阅读全文
摘要:
这题看网上题解,都是相除然后什么暴力的,感觉没有必要。实际上就是计算每个点相当于炮塔的斜率,考虑到斜率是浮点数,因此可以把分数约分,然后比较有多少个这样不同的最简分数即可。刚开始用数组开的比较大内存超限了,后来改用map辅助pair占用空间就少了。 #include using name... 阅读全文
摘要:
闲的蛋疼,前两个月学了java,今天又学了Python,所以找了个水题,熟悉一下四种语言。 其实语言不是问题,思路有了,换个语言,如果基本语法会的话,根本不成问题。 确实,Python就是够简洁。因为java和Python只知道点皮毛,可能写的还不够好。 Description Luke ... 阅读全文
摘要:
用二进制枚举要开环的位置,然后判断是否成环,是否为链,开环数是否>=链数-1。 调试了很久才过的,并且时间复杂度并不太好,还能优化。 #include using namespace std;int n, g[16][16], vis[16], l, kase = 0;bool line(int... 阅读全文
摘要:
从O(n3)的最普通的方法,用数学数列方法优化到O(n2),最后优化到O(n),终于AC了,最后的这个确实不好想。 O(n3): #include #include using namespace std;int a[102400];int main(){ ios::sync_with... 阅读全文
摘要:
总算刷够《算法竞赛入门经典》100题了,就像教主所说,有了练ACM的诚意,受自身水平和眼界所限,这总结难免会有一些个人色彩和不正确的地方,大牛勿喷。另外我的文笔可能极其拙劣,将就着看吧。 按照教主的进度安排,最理想的情况是寒假学完前八章,下学期开始学动态规划、数学和图论的基础,为暑假集训打下基础... 阅读全文
摘要:
这道题学校里的班级程序设计对抗赛决赛中就有这题,当时貌似只有一个人A出来,一头雾水,不知如何下手。其实现在看看AC的思路,当时还是飘出过来的,就是没有信心,按照这个思路写下去。 思路就是找到所有n/i结果相同的区间[i, j],这样就省出不少时间了,不然会超时。 #include using n... 阅读全文
摘要:
这题做了两个月,是第四章最后一个AC的题,小细节比较多,仅样例的输出就一百多行,无奈借助专业的ultracompare才完成了对比,最后找到汝佳老师的源代码改了一个小细节AC了。 注意的地方有:精度的控制;人数为0时平均分的输出;增加人员的时候,同名的人如果被移除了也可以添加。 #include... 阅读全文
摘要:
这道题只看书上的中文解释可能有些费力,理解题后还是比较简单的,对每个数字看能否与右边或下边的数字配对组成一张牌,注意加各种剪枝就行。 #include using namespace std;int kase, solution;int tab[10][10], res[10][10], vis... 阅读全文
摘要:
这道题思路明确了还是不难的,关键是判断方法。 长方体有三种不同的边,我们记为abc,并且记a>b>c,则长方体的六个面必定是ab、ab、ac、ac、bc、bc(按照边的长度排序),符合这种形式的就是一个长方体。 根据题目叙述,重点是怎样把输入的数据转化为这种标准形式,然后进行判断。 首先把每个面... 阅读全文
摘要:
距离100题还有4道,此时最忌讳急于求成,所以打算做题不看题解,有时候一道题很难需要想很多甚至做好几天都不能AC,但正是自己不断修改错误,优化代码,才使得自己的编程水平有进步,最后的AC才更加有成就感。 这道题思路还算简单,但是需要加各种剪枝条件,如当前做到达的地方能否再走n-d步到达原点,... 阅读全文
摘要:
这题后台数据一定很坑,估计是那种从节点1可以扩展到节点2~19,但是就是无法与节点20连通的那种,才导致了刚开始没有逆向搜索的时候TLE到3000MS。 逆向DFS找到所有与终点相连的节点保存下来,速度很快的。这样正向搜索时就要把与终点不相连的节点剪枝。 判断连通性的方法有很多,其实本题还可以用... 阅读全文
摘要:
本题值得学习的地方就是乐观估计函数的推到,需要数学指数的运算,另外计算2的n次方的时候可以用1using namespace std;int n, maxd, res[32];bool DFS(int d){ if(d == maxd) return res[d-1]==n; if(... 阅读全文
摘要:
本题的关键是应用IDA*算法,降低时间复杂度,启发函数的发现和推导是重点。 对于可以用回溯法求解但解答树的深度没有明显上限的题目,可以考虑使用迭代加深搜索。设计一个乐观估计函数,预测从当前节点至少还学要扩展几层才有可能得到解,则状态空间搜索变成了IDA*算法。 刚开始吧状态定义为typedef ... 阅读全文
摘要:
做这道题横跨了四个月,经历了各种超时和WA,没用字典树之前还用纯ANSI C写了一遍还是超时,今天拿出来,又找了一遍错误还是没发现哪里的事。最后让学长瑾神帮我看了下,原来是题目要求的100000内的斐波那契数,写成了102400内,本来想多算几个总有好处,但这恰恰违反了题意啊,最后... 阅读全文
摘要:
为了说明C++定义比较函数的几种方法,下面将以sort函数为例进行说明。 1.默认的内置比较函数,将按照对象内定义的#include #include #include #include using namespace std;int main(){ vector vec{"Hello",... 阅读全文
摘要:
这道题仍然是按照书上的思路来做,从上往下以DFS来搜索判断上下是否连通。根据圆与左右两边的下交点来判断出入点。 #include using namespace std;struct dot{ double x, y, r;}all[1024];int n, vis[1024], ok;d... 阅读全文
摘要:
这道题不看书上的分析还真不知道怎么做,关键就是转化成图论,然后利用拓扑排序判断DAG来做。 另外一个值得学习的地方是编号的时候,A+和A-可分别变为2n+1和2n,然后一个重要的关系要利用好就是(2n+1)^1 = 2n,2n^1 = (2n+1),可以很容易的进行A+和A-的变换。 #incl... 阅读全文