随笔分类 - UVA
摘要:暴力,和八皇后很像,用表示i+j和i-j标记主对角线,但是还是要加一些的剪枝的。1.最裸的暴搜6.420s,差点超时2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放0.400s#include#includeconst int maxn = 11;char G[maxn][maxn];i...
阅读全文
摘要:虽然这题可以用暴力n^3过,但是还有有种n^2的方法的,枚举b,对于b,分别枚举a和c,得到对于这个b的最优解,然后从所以b中选一个最优的。要保证字典序最小,只要从小往大枚举就好了感谢moonflyer#include#include#include#includeusing namespace s...
阅读全文
摘要:对于每个元素,最理想的情况就是都在它的左边或者右边,那么sort一下就可以得到一个特解了,然后大的中间不能有小的元素,因为如果有的话,那么无论选小的还是选大的都不是最优。对小的元素来说,比它大的元素在哪里是没有关系的。所以把大的看作一个整体,然后插空法算出总方案数。答案用llu存#include#i...
阅读全文
摘要:题意:分段用椎台面积近似计算体积,然后计算出近似值和真实值的相对误差微积分加数学。平头椎台的体积计算公式:V = 1/3*h*(S1+S2*sqrt(S1*S2)一个更快的计算多项式值的方法: for(int i = 15; i >= 0; i--) ans = ans*x+p[i],比直接pow快...
阅读全文
摘要:没必要每次都真的修改一遍字母值,用一个标记表示字母最后的值,最后一遍的时候再进行修改#include#includeconst int maxlen = 1000000+10;char str[maxlen];char to[256];int main(){ //freopen("in.txt...
阅读全文
摘要:一道物理题,解个2次方程就行了。。。求h最小的情况对应如下图所示做法不唯一,我想避免精度损失所以在化简的时候尽可能地去避免sqrt和浮点数乘除。似乎精度要求很低,直接用角度算也可以#include#includeint main(){ int T; scanf("%d",&T); ...
阅读全文
摘要:思路就是有零一变化的位Or以后一定是1,And以后一定是0;那么如果b的二进制更长那么就把包含a的部分全部置为1或0,如果一样长那么就把不同的部分置为1或0。今天被这题坑的地方:1默认是int,如果要移到32bits以上要转成long long用1LL,血的教训。以及,数组开得太极限,很容易出错。#...
阅读全文
摘要:一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化。预处理:预判一下并保存下一个可以放的位置距离之前的距离。这样可以减少很多判断。最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于等于ans,那么对答案没有贡献,可以剪去。优化:占用和不占用两种状态,如果横向来看可以压缩为int,判断...
阅读全文
摘要:读懂题意以后还很容易做的,和AbbottsRevenge类似加一个维度,筛子的形态,可以用上方的点数u和前面的点数f来表示,相对的面点数之和为7,可以预先存储u和f的对应右边的点数,点数转化就很容易了。具体做法看代码#includeusing namespace std;const int maxn...
阅读全文
摘要:非常适合A*的一道题。比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量。#include#include#includeusing namespace std;const int MAX = 21;int m,n,k;int C[MAX][MAX][MAX];int G[MAX][MAX];i...
阅读全文
摘要:根据先序历遍和中序历遍输出后序历遍,并不需要真的建树,直接递归解决#include#includeconst int N = 30;char preOrder[N];char midOrder[N];char S[N];int top;void solve(char *pre,char *mid,i...
阅读全文
摘要:骨牌无非两种放法,横着或竖着放,每次检查最r,c最小的没访问过的点即可。如果不能放就回溯。最外面加一层认为已经访问过的位置,方便判断。#includeconst int MAXD = 56;const int MAXB = 29;const int MAXP = 7;bool used[MAXB];...
阅读全文
摘要:首先说说IDS,就DFS限定一个层数上限maxd,如果在maxd范围内没有找到解,就增加maxd,继续搜索。当访问到当前结点u时,估计还要搜索h(u)层,如果h(u)+当前层数d>maxd的时候就剪枝,这就是IDA*。IDA*属于DFS,当状态空间某一层的结点数无穷大时,BFS失效,只能DFS。相比...
阅读全文
摘要:看到next_permutation好像也能过╮(╯▽╰)╭这题学习点:1.建图做映射2.通过定序枚举保证字典序最小3.strtok,sscanf,strchr等函数又复习了一遍,尽管程序中没有实际用上4.剪枝,或者回溯#includeusing namespace std;int G[8][8],...
阅读全文
摘要:这题数据大容易TLE优化:预处理, 可以先枚举出5^3的状态然后判断合不合法,但是由于题目说了有很多墙壁,实际上没有那么多要转移的状态那么可以把底图抽出来,然后3个ghost在上面跑到时候就不必判断了,减少了两次无用的枚举。减少代码的方法:1.结点没有3个时增加冗余点,2.把位置坐标二元组编号成一个...
阅读全文
摘要:题意,给你一颗树的bfs序和dfs序,结点编号小的优先历遍,问你可能的一种树形;输出每个结点的子结点。注意到以下事实:(1)dfs序中一个结点的子树结点一定是连续的。(2)bfs,dfs序中的一个结点u的后续结点一定是u或u的后兄弟结点{v},或u和{v}的后代节点{s}。(3)如果有后兄弟结点,那...
阅读全文
摘要:InputEach input set consists of a sequence of 52 integers separated by spaces and/or ends of line. The integers represent card values of the initial d...
阅读全文
摘要:InputInput data to the program specifies the order in which cards are dealt from the pack. The input contains pairs of lines, each line containing 26 ...
阅读全文
摘要:input80000000000000000000011110000111100011111001111110011110000111000-89 14 17 22 23 44 63 69 88 94 113 -120000-40 -10outputImage 19 14 17 22 23 44 6...
阅读全文
摘要:以前对离散化的理解不够,所以把端点和区间区分来考虑但是做完这题以后有了新的认识:先来看一个问题:给你以下的网格,你需要多少空间去存储红点区间的信息呢?只需要图上所示的1,2,3,4个点就足够表示红点所在区间了,为什么不是一个区间的第一个红点和最后一个红点呢?(如果这样记录的话则必须加一区间点,记录区...
阅读全文

浙公网安备 33010602011771号