A
题目描述
Venn非常喜欢积木,所以这是一道和积木有关的题。
BLUESKY007和Venn在堆积木。Venn有一个n×mn×mn×m的场地,BLUESKY007有qqq次操作。
BLUESKY007每次会选定一个矩形区域。具体的每次给一组(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1,y1),(x2,y2)表示矩阵的左下角和右上角。在这个矩阵所覆盖的每一个格子里,累加一个积木块。每个积木块可以可以抽象为一个1×1×11×1×11×1×1的正方体。
现在,Venn想知道他们堆出来的物体的表面积。
注意:堆出物体的底面积也算作表面积,请结合样例理解.
输入描述:
第一行三个整数n,m,qn,m,qn,m,q
接下来q行,每行四个整数x1,y1,x2,y2x_1,y_1,x_2,y_2x1,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

分析
因为只有 111 次询问,所以先先二维差分,然后再求前缀和还原原数组。得到原数组后怎么求表面积呢?(我特喵就是表面积求错了真自闭了,比赛最后下载完大样例才发现5555)。
对于每个点,如果有积木,先算上上下部分,s=s+2s = s + 2s=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。一个数列b1,b2,b3...bnb_1,b_2,b_3...b_nb1,b2,b3...bn
为回文数列,当且仅当该数列满足∀i∈[1,n] ,bi=bn−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个整数,a1,a2,a3...ana_1,a_2,a_3...a_na1,a

本文提供了牛客网提高组6的三道编程题的解题报告,包括题目描述、输入输出示例、解题分析及代码实现。题目涉及积木表面积计算、回文数列恢复和班级分组问题,通过分析和代码展示了解题思路和解决方案。
最低0.47元/天 解锁文章
1642

被折叠的 条评论
为什么被折叠?



