A
题目描述
Venn非常喜欢积木,所以这是一道和积木有关的题。
BLUESKY007和Venn在堆积木。Venn有一个 n × m n×m n×m的场地,BLUESKY007有 q q q次操作。
BLUESKY007每次会选定一个矩形区域。具体的每次给一组 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2)表示矩阵的左下角和右上角。在这个矩阵所覆盖的每一个格子里,累加一个积木块。每个积木块可以可以抽象为一个 1 × 1 × 1 1×1×1 1×1×1的正方体。
现在,Venn想知道他们堆出来的物体的表面积。
注意:堆出物体的底面积也算作表面积,请结合样例理解.
输入描述:
第一行三个整数 n , m , q n,m,q n,m,q
接下来q行,每行四个整数 x 1 , y 1 , x 2 , y 2 x_1,y_1,x_2,y_2 x1,y1,x2,y2
表示BLUESKY007选择的矩阵的左下角和右上角坐标。
输出描述:
一行一个整数表示物体的表面积
示例1
输入
4 4 3
1 1 4 4
1 1 2 2
3 3 4 4
输出
64
示例2
输入
4 4 1
1 1 2 2
输出
16
分析
因为只有 1 1 1 次询问,所以先先二维差分,然后再求前缀和还原原数组。得到原数组后怎么求表面积呢?(我特喵就是表面积求错了真自闭了,比赛最后下载完大样例才发现5555)。
对于每个点,如果有积木,先算上上下部分, s = s + 2 s = s + 2 s=s+2。再考虑四周,每个面的表面积怎么算入答案呢?我们需要比较四周积木和它的高度,如果比它小,就要加上他们的高度差作为表面积。
代码如下
#include <bits/stdc++.h>
#define LL long long
using namespace std;
int mp[5005][5005];
LL s, sum;
int main(){
int i, j, n, m, q, a, b, c, d, maxn;
scanf("%d%d%d", &n, &m, &q);
while(q--){
scanf("%d%d%d%d", &a, &b, &c, &d);
mp[a][b]++, mp[c+1][b]--, mp[a][d+1]--, mp[c+1][d+1]++;
}
for(i = 1; i <= n + 1; i++){
for(j = 1; j <= m + 1; j++){
mp[i][j] += mp[i-1][j] + mp[i][j-1] - mp[i-1][j-1];
//printf("%d %d %d\n", i, j, mp[i][j]);
}
}
for(i = 1; i <= n; i++){
for(j = 1; j <= m; j++){
if(mp[i][j]) sum += 2;
if(mp[i][j] > mp[i][j-1]) sum += (mp[i][j] - mp[i][j-1]);
if(mp[i][j] > mp[i][j+1]) sum += (mp[i][j] - mp[i][j+1]);
if(mp[i][j] > mp[i-1][j]) sum += mp[i][j] - mp[i-1][j];
if(mp[i][j] > mp[i+1][j]) sum += (mp[i][j] - mp[i+1][j]);
}
}
printf("%lld", sum);
return 0;
}
B
题目描述
BLUESKY007鸽鸽又在玩她的数列了。
这次BLUESKY007有一个长度为n的正整数数列,里面每一个数值都不超过k。一个数列 b 1 , b 2 , b 3 . . . b n b_1,b_2,b_3...b_n b1,b2,b3...bn
为回文数列,当且仅当该数列满足 ∀ i ∈ [ 1 , n ] , b i = b n − i + 1 \forall i \in [1,n]\ ,b_i=b_{n-i+1} ∀i∈[1,n] ,bi=bn−i+1
BLUESKY007非常关注序列的回文性质,并且她关注的回文种类和她的心情有关。
当她开心时她喜欢不存在长度为奇数且大于1的回文子串的数列,当她不开心时她喜欢不存在长度为偶数且大于1的回文子串的数列。
Venn又把BLUESKY007鸽鸽的数列弄坏了,导致里面的部分数字不见了。Venn想趁BLUESKY007鸽鸽回来之前,恢复整个序列,但是他只知道BLUESKY007鸽鸽现在的心情,以及这个数列原本是BLUESKY007喜欢的数列。
Venn为了恢复整个序列,他想知道有多少种不同的数列可能是原本的数列。
由于可能的数列太多会导致Venn崩溃,所以你只需要告诉他这个数字对998244353取模的答案即可。
输入描述:
第一行三个正整数n,k,m表示数列的长度,数列里面数字的上限,以及BLUESKY007此时的心情,m=0表示心情不好,m=1表示心情偷税。
第二行n个整数, a 1 , a 2 , a 3 . . . a n a_1,a_2,a_3...a_n a1,a2</