摘要:
Problem 1001 考虑到直接搜肯定TLE。 我们从起点开始搜10步,再从终点开始搜10步。 其中,从终点开始搜10步通过预处理完成,因为每一次的终点都是一样的。 存状态的时候我把0变成6(为了调试方便),把所有数字写在一行。 然后把这个大数看成一个7进制数,刚好在long long的范围内。 阅读全文
摘要:
Problem 1001 Problem 1002 考虑把每个询问拆分成2个单独的询问。 拆分后的询问为(s, t, x)。 也就是询问从s到t的最短路上所有权值小于等于x的点的权值总和。 我们把(s, t, a, b)拆成(s, t, a - 1) 和(s, t, b)。 那么第二个询问减去第一个 阅读全文
摘要:
Problem 1001 Problem 1002 如果不考虑必须互质的条件 那么可以通过递归求出所有的数 现在考虑必须互质 先用筛法预处理出每个数的质因数 由于每个数的质因数不会很多 所以直接容斥原理即可 1 #include<iostream> 2 #include<cstdio> 3 #inc 阅读全文
摘要:
Problem 1002 因为是完全K叉树 所以这棵树的所有孩子最多只有一个不是满K叉树 对这个孩子进行递归处理即可注意K=1时要特判 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int inf=(1<<30)-1; 4 cons 阅读全文
摘要:
Problem 1001对于每个询问,根据后缀{前缀插入到AC自动机内 然后每个单词写2遍,中间用{隔开,统计有那几个前缀和后缀 最后对于每个前缀和后缀 输出方案数 注意:单词可能有重复,可以用vector记录一下end数组 1 #include<iostream> 2 #include<algor 阅读全文
摘要:
Problem 1001 先预处理出一个数组,记录每个数对(x,y),y是x的倍数 用一个bitset A把a数组记录下来 然后用一个数组统计b数组 再用s数组维护一个后缀,s[x]表示大于x所有出现的数的个数的奇偶性 然后对于每一个未出现过的询问k,每个b数组中有的大于k的数,用bitset B记 阅读全文
摘要:
Problem 1004 直接用数组模拟 为了避免memset 可以一遍正着统计,一遍倒着统计 注意统计的时候不能出现乘除法 不然会T 然后记录一个cnt cnt大于2e8就跳出 同时有效数字的位数够了也跳出 当然所有的数都不同以及只有2个数相同要特殊处理 #include<iostream> #i 阅读全文
摘要:
Problem 1003 维护一个链表 链表中记录大于等于x的数 一开始链表中插入所有的数 从小到大枚举x 用双指针从左到右跳k次 做完一个x删除这个节点 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cst 阅读全文
摘要:
Problem 1002 这个Hash好难……其实要用到抽屉原理。 这道题当时做出的队伍很少。 我们取出1000*1000矩阵的所有8*8的矩阵,放到一个map里面。 然后我们去大矩阵里分块去找这些map里存过的东西……如果找到了那就有了答案。 也就是说根据原来map里存下的信息判断位置即可。 因为 阅读全文
摘要:
Problem 1001 其实就是求$2^{m}$有几位 那么答案就是$m * \log_{2}10$ Problem 1002 这道题的关键就是求出每个字母的价值。 那么我们对所有出现过的字母进行排序,排在越前面的字母价值越大。 那么关键字是什么呢? 令a[ch][N]表示字母ch对整个答案的贡献 阅读全文