当序列中最大和次大都是负数的时候,其相加会是一个更小的负数,因此答案为(Σai)+(m1+m2)*k,如果最大是正数次大是负数,那么一直相加直到两个数都为正数,当最大和次大都是正数时,做一下矩阵乘法即可. 代码 #include<cstdio> #include<cstring> #include<algorithm> #define N 200010 #define P 10000007 using namespace std; typedef long long l…
矩阵乘法 看成了合并果子... 就是斐波那契数列,只是有负数的时候,先把负数变成正的,然后矩乘 矩乘还是用单位举矩阵记录快速幂的矩阵比较保险 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ; const ll mod = 10000007ll; int n, k; ll ans; ll a[N]; struct mat {…