摘要:
dfs,O(2^16) 阅读全文
摘要:
dfs,搜索所有的操作方法,O(2^16) 阅读全文
摘要:
题意:平面上有一些点,现要求用一些圆心在x轴上的圆(雷达)来覆盖这些点,问最少需要多少雷达。分析:我的解法是把点按横坐标排序,然后把每个点的雷达尽量往右放,然后每放一个雷达都要保证雷达左面的岛都被雷达所覆盖。所以我们可以按一个点靠右放完雷达后,再根据后面的在雷达位置左面的点,把雷达向左移。一个雷达经过了移的过程,就一定是能覆盖左面的岛。所以排好序后,只需O(n)。注意:unique函数的返回值是结尾指针,所以可以用被注释掉两行的方法来获得数组长度。标准方法是把每个点的放置雷达的区间求出,然后按照区间排序。排好序后,从左至右看,当发现下一个区间的起始点大于前面所有区间的最小结束点的时候,答案加一 阅读全文
摘要:
本来想二分,后来发现一个函数就解决了。 阅读全文
摘要:
本题中最多5个命题变项:p,q,r,s,t 每个有0,1两种取值,所以总共32种情况,分别枚举即可。 对于每种情况,计算表达式的值,如果有结果为0的则输出not 难点在于如何计算表达式的值,我们采用递归的方法,把表达式分为一或两个子表达式,并把参数end(本表达式的结束位置)传给上一层,一遍上一层获取第二个子表达式的起始位置。最后通过两个子表达式的结束位置,得到整个表达式的结束位置。 en... 阅读全文
摘要:
最大的难点在于读题,全年十二个月,有8个连续的五个月,1~5,2~6,…… 确定了s和d,8次报告中每次报告有五种选择(i次s,(5-i)次d,i = 0~4),在这五种情况中必然是选择最优的,即亏损且亏损值最小。假设我们按某种顺序安排好了这五个月哪些是亏,哪些是盈。我们就可以让12个月以此5个月为循环构成。然而想要让d在12个月中出现得尽量少,就必须在安排5个月的时候把s排在前面,d排在后面。... 阅读全文
摘要:
本题的图与其他题稍有不同,本题以左下角为(0,0)点,列号对应x,行号对应y。 完全模拟即可。 阅读全文
摘要:
本题是简单的模拟,使用双层vector嵌套存储棋子的位置和种类,然后分别对每个vector进行排序 注意:排序方法为sort(piece[i].begin(), piece[i].end(), cmpWhite); 当然,cmpWhite是比较函数,可以不加比较函数,只用用前两个参数。 阅读全文
摘要:
可以认为这是一道简单的字符串处理题,只要把相应的值填入map对应的位置,然后把map输出就行了 阅读全文
摘要:
这一题学到的东西太多了 1.大数组不能开在函数中,要使用全局变量 2.bellman_ford算法 3.c语言中struct不能有构造函数,开数组不能使用const的值作为大小,而要用define. 4.代替vector的建图方法,数组模拟链表法,map[i]存第i个点的第一条边在e中的下标。e用来存边,next记录该点的下一条边的坐标。 5.使用vector的效率极低。 本题只需建正... 阅读全文
摘要:
错了好多次,原因有,path是双向的,开始没考虑到。边的数组应开到2500*2 + 200。图式不连通的,要把图的各个部分都覆盖到。 本题用spfa算法,判断是否有负权回路。若松弛过程中存在某点的入队次数=n,则说明有,否则没有。 阅读全文
摘要:
题意:每个人都有一个物品,对应一定的钱数,想要得到此物品可以直接出钱,也可以通过用其他人的物品并添加一些钱来交换,问要得到酋长的物品最少需要多少钱?另外,每个人都有一个等级,要求和你交易的人中不能有任何两人的等级相差m以上。分析:我们可以把本题理解为,我们要买一号物品,而一个物品的一部分价值可以转化为别的物品,我们通过购买别的物品和加钱来购买获得一号物品。所以我们可以把需要加的钱数作为该物品到别的物品的一条边,走过这条边,我们要花一些钱,然后我们只需要购买现在所在结点的物品即可。这样就把问题转化为最短路问题,用dijkstra就可以了。本题还有个等级制度的问题。我们可以每次枚举一个宽为m的等级 阅读全文
摘要:
dijkstra 把存最短距离的数组改为存储frog distance即可 阅读全文
摘要:
floyd算法,floyd过后查看每个点传播消息需要的时间,把最小的点输出即可。 阅读全文
摘要:
题意:给定一些货币之间的单向汇率,问一笔钱能否经过若干次对换而增值。分析:根据输入建立有向图,不能使用dijaskra,因为增值的方法不一定是优先选择最小的路径,并不是贪心所能解决的。所以要用以动态规划为基本思想的floyd来做。#include <iostream>#include <string>#include <vector>using namespace std;const int maxn = 31;struct edge{ int x; double l; edge(int xx, double ll):x(xx),l(l... 阅读全文
摘要:
简单题,只要对所有的数字求出cycle number即可 阅读全文
摘要:
水题,排序 阅读全文
摘要:
这是一道简单题,但是我错了n次。 开数组的时候一定要注意范围,不要直接maxn; 阅读全文
摘要:
水题,注意判断是不是整分钟读完,如果不是,去尾进一。 阅读全文
摘要:
赤裸裸的01背包 阅读全文