摘要:
Accept :(题目就是这个..) 思路:一开始读错题来着。以为两条线不能有一样的点。 后面发现题目就是让我们求两条线,每条线只经过两个点即可。 首先,考虑如何判断一条直线经过两个点: 枚举一个点,然后可以发现,对于在同一条直线上的点,他们肯定都会经过这个枚举的点,并且因为在同一条直线上,所以斜率 阅读全文
摘要:
Intersection 思路:可以发现,如果出现了重复的情况,那么就会导致时间变化。 那么,当出现了重复情况时,我们就让左边的往上走到上面那层,这样对于第一个的时间,没有变化。 因为停在原地的话,和往上走一次都+1.所以时间一样。 但是向上走之后,对于下面的都可以向上1步,所以当发现碰撞时,都保持 阅读全文
摘要:
Car: 思路:暴搜,对于每一个尾数,显然只会在5天中的某一天被禁止。 那么5^10.不会爆 但是如果用字符串cin输入字符串,就会因为输入过慢而TLE,那么这里直接把字符输入变成整形,然后取最后一位即可。 Code: #include<bits/stdc++.h> using namespace 阅读全文
摘要:
Total Eclipse 思路:先考虑一种普遍解法。 对于每个极大连通块,一次次块上的全部点减去1,断开为子图后继续重复减1,显然是最优的减法。 但是减去后遍历边的复杂度过高,且b值也很大,所以考虑成加边的形式。 首先将点按权值降序。那么我们可以采取将最大的点减成第二大的点,然后两个点又一起减成第 阅读全文
摘要:
1005 : Fibonacci Sum 从斐波那契的通项入手。 思路: 所以 $ans = \sum_{i = 0}^{n} ans1^k = \sum_{i = 0}^{n} \frac{1}{T^k} (b^i-c^i)^k$ 令$f[i] = (b^i-c^i)^k$ 那么ans = $\f 阅读全文
摘要:
看到题目后,显然是求一个最小的环。(把每个人看成点,关系看成边。) 但是这里可以对题目做一个转化。 可以发现每个人的只能有一个目标点。 对于环上的点,显然这个环上的任意一个点都不会再往外走。那么只存在别的点连入该环的情况。 别的点连入该环后,别的点显然无法再成环。 那么,我们可以将这些点都删去,最后 阅读全文
摘要:
C: 将序列排开。 a[1] a[x] a[x+1] a[n]. 可以发现,若满足a[1] < a[n]. 那么对于a[x] > a[1] 和 a[x+1] < a[n] ,将肯定会存在一种情况满足。 然后就可以不断缩减区间数。最后变成a[1] , a[n]. 所以当a[1] < a[n]时,就可以 阅读全文
摘要:
E: 首先看到公共前后缀。 可以想到kmp的next数组就是求得最长公共前后缀。 那么假定的最长公共前后缀就是next[len]. 如果这个串中有和它一样长的。那就说明这个最长公共前后缀在字符串中间出现过。 怎么判断?用next数组,当next数组合next[len]时,说明就是最长公共前后缀。 为 阅读全文
摘要:
最大的gcd就是相邻的差距的gcd. 证明: 令p = 差距的gcd. 令a[1] = m*gcd. 那么 a[2] = m*gcd+k1*gcd. a[3] = m*gcd+k2*gcd. 可以发现对于 a[2] = k1+a[1], a[3] = (k1+k2)*a[1], a[4] = (k1 阅读全文
摘要:
思路: 观察后可以发现。 卸载操作就是删除子树上存在的点(包括自身). 安装操作就是添加上该点到根的链上的所有点。 树剖重链,线段树维护重链。 对于卸载很简单,删去子树上的值即可。 对于安装。不断跳到链头,直到到根即可。 对于查询有多少只改变了。 只需要记录改变前的值,然后查询改变后的值。 一减就是 阅读全文