A - Caisa and Sugar (签到)
B - Caisa and Pylons (根据能量守恒定理hhh)
C - Gargari and Bishops (模拟)
题意
给出一个棋盘你可以放两个皇后,皇后可以攻击和他一个对角线的对象。但是两个皇后不能攻击到同一个目标 求出皇后攻击目标后获得的最大值
思路
首先对于对角线正对角线的x+y都是固定的,反对角线的X-Y都是固定的
然后我们就枚举对角线的值就行,
通过观察发现不相交的对角线他们的x+y的奇偶不同。所以我们分别求出最大即可
1 |
|
D - Gargari and Permutations (DP)
题意
求出K个排列的LCS
思路
两种解法:
DP:首先对于第一个排列他们之间的大小关系肯定是固定的,所以我们可以枚举第一个排列的大小关系,判断这个关系在其他k-1个排列中是否也符合 如果符合那么后者的答案就可以从前者身上转移而来 $dp[i]=max(dp[i],dp[j]+1)$
dfs: 前半部分相同,后面改成每一个符合的关系一起建图。对于每个点求出一个最长路。
1 | //dp |
1 |
|
E - Caisa and Tree (暴力/素数筛选)
题意
给你一个树,让你求根(1)到一个点(v)之间路径上和v的值之间GCD不为1的且深度最大的点编号 有五十次修改一个点的操作
思路
看到50次修改就已经想到了暴力了。
但是还是想用正常操作做。
初始化每个值的素因子
首先我们对于每个点存一个他的素因子,然后在每次修改的时候重新建图。从根结点开始开一个栈,让遍历到的点进去,判断这个点的素因子是否出现在刚才遍历的路径中。然后选一个最大的。后把当前这个点也入栈。遍历这个点的儿子们。然后回溯的时候把所有的素因子中包括他的弹开。
//讲道理每个素因子开一个vector就可以了。可是一直过不去,其他人用map就过去了。。
第二种暴力解法。对于每个操作离线存起来,然后在修改的时候再把之间的询问一次性遍历。
1 |
|
1 |
|