思路讲解
赛时其实什么都想到了,但因为代码编写的问题没过,唉,不多讲了。

唉,主要还是我不太熟悉0-based。
AC代码
1 |
|
赛时其实什么都想到了,但因为代码编写的问题没过,唉,不多讲了。

唉,主要还是我不太熟悉0-based。
1 | #include <bits/stdc++.h> |
题意概括——最少修改使任意3元组可以组成三角形
感觉这位的写的比较清楚,思路也比较易懂
排序什么的很好想,后面的有点难
总的来说就是不断选取(ai,ai+1)然后看以这个为母体,需要修改多少次,得到最少修改数,输出
这个具体的计算我们结合代码来讲
核心代码:
1 | for(int i=0;i<n-2;++i) { |
l就是前面所有需要改成 A[i+1] 的数量(忽略A[i] )
r就是后面所有需要改成 A[i]+A[i+1] 的起始索引(哈哈,稍微有点混乱,不好意思)
1 | #include <bits/stdc++.h> |
毕竟采用了我不太熟悉的0-based-index,还是稍微有点小翻车,
lans=l+(n−r);
我因为比较熟悉1-based,写成了 n+1−r 但这在0-based里是不对的,n-r其实是n−1−r+1
n−1为索引上界
利用矩阵乘法结合律减少时间与空间复杂度

(W(QxKt)) x V → W*Q x (Kt x V) (其实这些括号都是吓唬你的,乘法哪来的什么括号)*
1 | #include <bits/stdc++.h> |
哈哈,矩阵嘛,总是有点烦人的,特别是那个乘法的循环很容易写错,不过还好,样例比较强,直接AC了
今天还比较顺利
主要思路见此题解
其实说白了就是有个公式可以算x轴投影重叠长度 y轴投影重叠长度 两个相乘就好
1 | #include <bits/stdc++.h> |