20241118【NOIP】模拟

比真实NOIP的难度简单多了,但还是挂惨了

为什么没想到T2怎么做呢

T1

打表后容易发现答案形如 9 7 5 3 1 2 4 6 88 6 4 2 1 3 5 7

T2

边数是 O(n2) 级的,太多了,发现数据支持 O(nq) 的做法,于是考虑怎么减少边数到 O(n) 级。每次查询相当于是增加了一条边,可以想不到离线下来,先求出初始的最小生成树的边,然后把增加的边加进去,每次询问直接跑kruskal,在过程中判断这条边在时间上是否能选择就完了,边数是 n1+q。很简单的,但是傻逼出题人卡常,所以第一遍边数 O(n2) 的时候要用prim。

T3

第一问贪心一下,把两个序列排序然后同一位置上的数对应起来就是答案。记录原序列中 BAi 配对的位置,也是贪心的想,如果遇到一个位置当前匹配的不是它应该匹配的数,那么就一直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

题都读不懂,傻逼出题人题意写得批烂还不给样例解释,玩你吗

posted @   和蜀玩  阅读(18)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示