思路讲解
?即是有多少个数不参与这个移动

当然这个公式只有在特定条件下才能用
1 | if(K==0){ |
AC代码
https://codeforces.com/contest/2028/submission/300282002
1 |
|
?即是有多少个数不参与这个移动

当然这个公式只有在特定条件下才能用
1 | if(K==0){ |
https://codeforces.com/contest/2028/submission/300282002
1 | #include <iostream> |
我看题解说,注意到,每个块最多被move back一次,那为什么最多被移动一次那?
我个人的理解是因为我们是可以随意选择move back的顺序,所以我们可以让我们的move back自动搞为一个单调的。
其实这个题解主要还是坚定了我的信心,让我知道我做法的时间复杂度是没问题的,我前面想复杂了。
总体上的思路是用数据结构优化模拟法,当然发现加粗(每个块最多被move back一次)是非常重要的,否则很容易想复杂。
核心是这段程序
1 | while (!pq.empty()) { |
https://codeforces.com/contest/2047/submission/300222017
1 | #include <iostream> |
1 | // 在这两个位置的s和p等价于点 |
然后就是不能有p出现在s之后,不能有s出现在p之后,非常简单吧
1 | #include <iostream> |
我想到一个背景故事,就是说每条龙都想有和自己的朋友不同的涂装,但是编号越大的涂装越贵,龙龙们想用编号比较小的涂装达成这一目的,但是龙龙们不知道怎样组合才好,于是找到了你。
多用构造之方法,少用特判之方法,毕竟是构造题嘛。
https://codeforces.com/contest/2049/submission/300064440
1 | #include <iostream> |
WA https://codeforces.com/contest/2049/submission/300052744
1
5 3 5
2 1 2 1 0 (A[2]=1,但应该是0)
唉,很久以前写的,已经看不懂什么意思了
1 | #include <iostream> |