20241118【NOIP】模拟
比真实NOIP的难度简单多了,但还是挂惨了
为什么没想到T2怎么做呢
T1
打表后容易发现答案形如 9 7 5 3 1 2 4 6 8
或 8 6 4 2 1 3 5 7
T2
边数是 级的,太多了,发现数据支持 的做法,于是考虑怎么减少边数到 级。每次查询相当于是增加了一条边,可以想不到离线下来,先求出初始的最小生成树的边,然后把增加的边加进去,每次询问直接跑kruskal,在过程中判断这条边在时间上是否能选择就完了,边数是 。很简单的,但是傻逼出题人卡常,所以第一遍边数 的时候要用prim。
T3
第一问贪心一下,把两个序列排序然后同一位置上的数对应起来就是答案。记录原序列中 和 配对的位置,也是贪心的想,如果遇到一个位置当前匹配的不是它应该匹配的数,那么就一直swap,直到正确匹配,正确性感性理解。
点击查看代码
for(int i=1;i<=n;++i) a[A[i].id].pa=B[i].id;
for(int i=1;i<=n;++i)
while(a[i].pa!=i) swap(a[i],a[a[i].pa]),++ans2;
cout<<" "<<ans2;
T4
题都读不懂,傻逼出题人题意写得批烂还不给样例解释,玩你吗
頑張って