前言

和大多数人一样只过了 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 就可以了。

我还有什么地方要改

先从题目中看出操作,再从操作中看出带来的变化,最后从变化中看出规律;

思路一定要清晰,不能乱想。

我应该做些什么

看到题目应该先想出思路,再写到本子上;

想思路时应该得判断是否可行,如是否超时,是否有反例等;

多画图。

(主要是觉得昨天写的问题今天还能用上,所以只改了一处)

希望大家能跟我提点学习的方法,如有用处,必有重谢。