03 2013 档案
摘要://////写在前面To二鸣君:鉴于你让我来贴代码,过后要再请我吃一顿饭才行~题目大意:给出用字母代表数字的加法等式,求出满足等式的字母对应数字的方案数。思路: 搜索+剪枝。我的几点优化:1. 算出每个字母对应的系数,减少搜索时的计算。2. 计算上下界时很暴力的按照每个字母上界为9,下界为当前搜索的数字(我是按照数字1-9搜的)来算。(感谢二鸣君。)代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;char s[13][10],c[10];int n,m,
阅读全文
摘要:给定起点终点的无向图,出发时速度为1,到达时速度也为1,在每个点可以进行速度+1,不变,-1的操作,在每条边都有限速,到达一城市后不能直接走反向边,求最短时间。SPFA作松弛操作的典型例子,设计状态f[i][j][k]为从k城市以j速度到达城市i时的最短时间,然后开一队列依次向下一个城市做递推即可,最后看任意城市以速度1到终点城市的时间最小值即可。递推初值可设置为f[s][0][0],然后做速度必须>0的限制即可保证以速度1出发。表示依然不太清楚struct或者class能不能直接用=赋值,重载operator =不会写,保险起见,本程序中写了assign()函数进行赋值。// Prob
阅读全文
摘要:题目大意: 一个01方阵,初始状态全1,每次操作把一个到主对角线为止的L形的线上的格子改变状态,求最少操作几次思路: 每个格子可能被多次改变。显然的也是唯一关键的一点就是注意到能对某个格子改变的只有对该格子上方和右方的格子的操作。 所以说按从右上角/左下角往主对角线的顺序每个格子就可以确定是否要做操作。 然后由于时间复杂度的要求,用up数组记录该格以及该格上方格子所做的操作数的总和,用rt数组记录右方。如此可以O(1)的转移。上方和右方的操作数总和为up[x-1][y]+rt[x][y+1]。如果把1做了如此次的改变后和目标不符,就要对当前格进行改变(操作)。代码:#include "
阅读全文
摘要:题目大意:给出一道数独题,判断该数独是否有解且有唯一解。解题思路: 由前几题的难度得,此题的难度不会太过分,所以简单暴力就可以了,40ms用时一本满足。 简单地讲一下具体的实现,从左上开始从左到右从上到下一格一格枚举过去,枚举当前格子的数字时,判断一下这个数字能不能用就行了(判断是否在该行,该列,该区域出现过),全部填满时就找到了一个解,找到第二个解的时候停止搜索即可。 关于判断某个数字在当前区域是否用过,比较方便的方法是,事先算好p[i][j],用来记录第i行第j格属于哪一列,哪一行,哪一区域,这样在写dfs时会方便很多。代码:/*被注释掉的代码都是用来调试的,取消注释后可以用来查看程...
阅读全文
摘要:这题主要是字符读入的问题吧,对于NAME的读入,一直getchar()到',',对于后面的五个属性from,to,length,people number,light只读数字就可以了,而且他们的处理相同,可以用一个函数来实现下面是代码:1. #include<iostream>2. #include<cstdio>3. #include<cstring>4. #include<queue>5. #include<algorithm>6. using namespace std;7. struct Edge{8. lon
阅读全文

浙公网安备 33010602011771号