小朋友排队
注意0的情况, lowbit(0) = 0;
类似于冒泡排序,k个逆序对,交换k次,每次交换只会使逆序对减一
因为考虑了区间,所以用了树状数组
树状数组里存的是这个数字的个数
k个逆序对:比它大的 + 比它小的
每个数都会被这样操作一次,所以需要除二,每个数必定被操作一次(虽然但是,还是不能明白(n * (n + 1) / 2)
int a[maxn];
int sum1[maxn], sum2[maxn];
int n;
inline int lowbit(int x){
return x & (-x);
}
void updata(int i, int val){
while(i < maxn){
sum1[i] += val;
//sum2[i] += val;
i += lowbit(i);
}
}
int sum(int i){
int Sum = 0, x = i;
while(i){
Sum += sum1[i];
i -= lowbit(i);
}
return Sum;
}
int ans1[maxn];
int main() {
IOS;
// freopen("P1908_6.in","r",stdin);//读入数据
// freopen("P1908.out","w",stdout); //输出数据
cin >> n;
for (int i = 0; i < n; ++i){
cin >> a[i];
++a[i];
}
for(int i = 0; i < n; ++i){
ans1[i] = sum(maxn - 1) - sum(a[i]);
updata(a[i], 1);//每个数的个数
}
re(sum1);
for (int i = n - 1; i >= 0; --i){
ans1[i] += sum(a[i] - 1);
updata(a[i], 1);
}
ll res = 0;
for (int i = 0; i < n; ++i){
res += (ll)ans1[i] * (ans1[i] + 1) / 2;
}
cout << res << endl;
return 0;
}
垒骰子
和前面斐波那契数列同样的道理
同样用到了矩阵快速幂(只有背了) 算是套路。
每个状态是有限制的,且限制相同就能进行矩阵快速幂,因为能推出A[]矩阵 f[][]
能够清楚地表示出上一个的状态,所以如果发现dp的数据范围不够,肯定是想岔了
int f[6][6] = {4, 4, 4, 4, 4, 4};
int a[6][6];
int get_op(int i){
if(i < 3)
return i + 3;
return i - 3;
}
void mul(int a[][6], int b[][6], int c[][6]){
static int t[6][6];
re(t);
for (int i = 0; i < 6; ++i){
for (int j = 0; j < 6; ++j){
for (int k = 0; k < 6; ++k){
t[i][j] = (t[i][j] + (ll)b[i][k] * c[k][j]) % mod;
}
}
}
memcpy(a, t, sizeof t);
}
int main() {
IOS;
// freopen("P1908_6.in","r",stdin);//读入数据
// freopen("P1908.out","w",stdout); //输出数据
int n, m;
cin >> n >> m;
for (int i = 0; i < 6; ++i){
for (int j = 0; j < 6; ++j){
a[i][j] = 4;
}
}
while(m--){
int x, y;
cin >> x >> y;
--x, --y;
a[x][get_op(y)] = 0;
a[y][get_op(x)] = 0;
}
//快速幂
for (int i = n - 1; i; i >>= 1){
if(i & 1)
mul(f, f, a);
mul(a, a, a);
}
int res = 0;
for (int i = 0; i < 6; ++i){
res = (res + f[0][i]) % mod;
}
cout << res;
return 0;
}
大小写转换
transform(src.begin(), src.end(), src.begin(), ::toupper);
transform(src.begin(), src.end(), dst.begin(), ::tolower);
字符互转:
atoi(tem.c_str());
剩下时间在刷往年蓝桥杯题解,感觉连省三都拿不到(毕竟基本0题),说好的暴力无用水杯呢呜
早知道早开始准备了orz,明年再战吧(再挣扎一小下下