摘要:
题意:给出几堆石子数量,每次可以取走一堆中任意数量的石头,也可以将一堆分成两堆,而不取。最后取走者胜。思路:石子数量很大,不能直接算,sg打表找出规律:正常情况下a[i]=i,但是有例外的,就是i%4=0和i%4=3的sg值是交换了的,所以要算某个状态的sg值时,若模4为0,则进行自减,若模4为3则... 阅读全文
摘要:
题意: 有编号为0~n的n+1个房屋,给出每个房屋的起始价格,随后给出m种修改,每次修改都要进行输出所有房屋的价格总和。修改有两种方式:(1)政府调控,编号L~R全置为同一价格(0)房屋自行涨跌,编号L~R的房屋价格全部涨/跌一部分。思路: 只需要一个tag+浮动的价格就可以解决这个问题了。当t... 阅读全文
摘要:
题意:有一块宣传栏,高一定,给出长度,再给出多张海报的张贴位置,问还能见到几张海报(哪怕有一点被看到)?假设海报的高于宣传栏同高。思路:问题转成“给出x轴上长为L的一条线段,再用n条线段进行覆盖上去,最后还能看到及条线”。长度是0~L,即长度是L,进行离散化的时候,应该用1~L,每个数字表示一个单位... 阅读全文
摘要:
题意:实现添加单词和查找单词的作用,即实现字典功能。思路:'.' 可以代表一个任何小写字母,可能是".abc"或者"a.bc"或者"abc.",能应对这三种就没有问题了。在每个单词的尾字母上标上tag=1,代表从树根到此节点有一个单词。暂时想不到更快的办法。 1 class WordDictiona... 阅读全文
摘要:
G++213ms12MB题意:给一个序列,询问时要返回给定区间的和,修改时整个区间都改成一个值。思路: 按提示说的做。线段树,再设置lazy_tag,必要时再修改 查询时遇到tag就将自身分配成两半分别给左右孩子(如果有的话),然后为左右孩子置tag,取消自身的tag。当查询的节点刚好有tag,... 阅读全文
摘要:
思路: 两种实现方法: (1)用链表(2)用数组。 1 #include 2 using namespace std; 3 int n, q, L, R, op, P, W; 4 5 struct node 6 { 7 int v; 8 node *ll,*rr; 9 };10... 阅读全文
摘要:
G++77ms0MB思路:这题用暴力是最快的,甚至比线段树还佳。 按全部都是查询的来算,是O(n*q)。 1 #include 2 using namespace std; 3 const int N=10010; 4 int w[N], n, q, L, R, tmp; 5 6 int mai... 阅读全文
摘要:
ACG++826ms146MB思路: 时间复杂度O(nlogn)。 1 //#include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #in... 阅读全文
摘要:
题意:给一个9*9的矩阵,如果该矩阵是有效的数独盘的话,返回true。注意同一行或同一列的数字只能出现1次,同时其中的9个小的数独盘也不能重复。思路:扫整个盘一遍,在扫的同时先考虑行,列,小盘。用二维数组维护列的,用一维数组维护行的,再用个二维的维护小盘。用哈希来判断是否已经存在。 1 bool i... 阅读全文
摘要:
题意:如果两个字符串是对称的,就返回true。对称就是将串1中的同一字符都一起换掉,可以换成同串2一样的。思路:ASCII码表哈希就行了。需要扫3次字符串,共3*n的计算量。复杂度O(n)。从串左开始扫,若字符没有出现过,则赋予其一个特定编号,在哈希表中记录,并将该字符改成编号。对串2同样处理。其实... 阅读全文