实小社团练习赛17
本文总阅读量次
8524,8034,8589,2401
T1
枚举
字符串长度不长,枚举时间复杂度为
for(int i = 0; i < s的长度-t的长度+1; i++){ //注意枚举范围
不同字符个数初始化0;
for 枚举字符串t
比较字符串t和s从i开始的子串,记录不相等的次数;
次数打擂台
}
T2
DFS
深搜全排列,不解释,基本功。
T3
数学+枚举+计数
一个可用的结论:一个数末尾3个数能被8整除,那么整个数就能被8整除。
所以,可以分情况考虑。
(1)对给定的序列进行计数统计。
(2) 1位数和2位数的时候特殊判断,是否能被8整除。
(3) 超过2位数后,枚举8~1000(根据上面的提示,只考虑3位数,如果精确计算应该可以从112~992),循环变量步长按公差8移动,避免不必要的计算。
[1]分解循环变量
[2]根据题意,分解的3个数字必须都是大于0的
[3]满足条件2后,对3个数字进行计数
[4]在条件3基础上,跟原序列的计数数组,跟对应的3个数字的计数数组进行对比,如果个数达到要求,则输出'Yes'.
假设分解的3个数字分别是a,b,c,计数数组为cnt,原序列计数数组为v,则要满足:
if(v[a]>=cnt[a]&&v[b]>=cnt[b]&&v[c]>=cnt[c])...
T4
BFS
输入的数据需要处理,当输入流星坐标的时候,需要对5个位置进行判断(上下左右和本身位置),如果砸落的时间更早,则要更新地图数据,而没被砸到的位置,初值应为-1(时刻包含0,未砸到需要设定一个小于0的数)
然后我们的目标,就是寻找未被砸到的空地。
跟以前做法类似,可以用一个二维数组记录步数,且这个数组也可以用来判断是否访问过(假如有步数,那么已经走过了)
当访问一个没走过的格子,我们需要计算当前的步数,然后跟这个格子的流星最早砸落时间比较,如果步数比时间更早,则是安全的,把这个位置入队;如果这个位置刚好是安全的空地,则搜索结束。