前言
和大多数人一样只过了 AB 两题。
比赛链接:ABC470
做了个博客网站,大家可以看看 (^_^):与日的个人网站
(注:因为备案还没过,所以暂时用 服务器的 IP 地址 ,等备案过了这条注释再删除,虽然蛮不安全的)
题目
A : for 循环问题。
B : 统计每个颜色的个数,最终答案是 n-max( 同颜色的个数 )。
C : 考时一直在乱列例子(例如想用前缀和来解决问题),最后想了半个多小时,最终终于...放弃了。
考后才想到异或的可逆性,不过也为时已晚。
扯远了昂,说回到方法
维护一个序列 idxs,表示不为 0 的元素,还有一个 sum,表示所有数异或的结果。
对于操作 1 ,先判断 a[x]加之前是否为 0,如果是 0 就说明当前不在 idxs,但加上之后就应该在了。
因为异或的 可逆性,既能表示加入又能表示删去,所以 sum 可以先删去 a[x],再加入( a[x]+1 ),合并起来就是 sum=sum^a[x]^(a[x]+1)。
对于操作 2 ,我们只操作 idxs 中的数,sum 操作同理,减去之后,与操作 1 同理,删去 idx 的一些数。
D : 这个题其实我考时也研究了许久,不过也放弃了。
观察题目,看操作有什么规律:
例: 设 P={2,1,3,5,4},根据题意列出 P′={2,1,3,5,4}
当交换第二位和第四位:P={2,5,3,1,4},P′={4,1,3,5,2}
观察 P′的变化:P 中的第 1 位和第 5 位调换了。
联系 P : 发现交换前的第二位和第四位刚好为 1 和 5。
得出操作 1 :当 P 调换第 x 和 y 位时,P′就调换第 P[x] 和 P[y] 位。
我们再看操作 2 :
例: P={2,5,3,1,4},P′={4,1,3,5,2}
当 P 改为 P′后,列出新的 P 的 P′:
P={4,1,3,5,2},P′={2,5,3,1,4}
看出 P′又变成了原来的 P,所以这两个数组的数字没变,只是调换了而已。
所以我们设一个指针 c,c 指向的数组是 P,另一个是 P′,当执行操作 2 ,则 c 指向 P′,这样 P′就变成了 P,P 就变成了 P′。
这样操作 1 的数组看 c 就可以了。
我还有什么地方要改
先从题目中看出操作,再从操作中看出带来的变化,最后从变化中看出规律;
思路一定要清晰,不能乱想。
我应该做些什么
看到题目应该先想出思路,再写到本子上;
想思路时应该得判断是否可行,如是否超时,是否有反例等;
多画图。
(主要是觉得昨天写的问题今天还能用上,所以只改了一处)
希望大家能跟我提点学习的方法,如有用处,必有重谢。