AcWing 5029. 极值数量
给定一个长度为 n 的整数数组 a1,a2,…,an。
如果一个元素左右两边均有相邻元素(也就是不位于数组的两端),且满足以下两个条件之一:
则称该元素为一个极值元素。
请你计算,给定数组中有多少个极值元素。
输入格式
第一行包含整数 n。
第二行包含 n 个整数 a1,a2,…,an。
a
输出格式
一个整数,表示极值元素的数量。
数据范围
前 3 个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤1000,1≤ai≤1000。
输入样例1:
3
1 2 3
输出样例1:
0
输入样例2:
4
1 5 2 5
输出样例2:
2
#include
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
int cnt = 0;
for(int i=0;i>a[i];
}
for(int i=0;ia[i-1]&&a[i]>a[i+1]) cnt++;
}
}
cout<
AcWing 5030. 核心元素
给定一个长度为 n 的整数数组 a1,a2,…,an,数组中的每个元素都是一个 1∼n 之间的整数。
我们规定,数组中出现次数最多的元素为数组的核心元素,例如数组 [1,1,1,2,3] 的核心元素为 1。
此外,如果数组中出现次数最多的元素不唯一,则出现次数最多的元素中数值最小的那个元素为数组的核心元素,例如数组 [1,2,2,3,3] 的核心元素为 22。
对于 1≤i≤n 的每个整数 i,请你计算有多少个给定数组的非空连续子数组的核心元素为 i。
输入格式
第一行包含整数 n。
第二行包含 n 个整数 a1,a2,…,an。
输出格式
共一行,输出 n 个整数,其中第 i 个整数表示给定数组中核心元素为 i 的非空连续子数组的数量。
数据范围
前 3 个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤5000,1≤ai≤n。
输入样例1:
4
1 2 1 2
输出样例1:
7 3 0 0
输入样例2:
3
1 1 1
输出样例2:
6 0 0
#include
#include
#include
using namespace std;
const int N = 5010;
int a[N];
int cnt[N][5010];
int ans[N];
int main()
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i ++ )
{
scanf("%d",&a[i]);
for(int j=1;j<=n;j++)
{
if(j==a[i]) cnt[i][j]=cnt[i-1][j]+1;
else cnt[i][j]=cnt[i-1][j];//每个数字出现次数的前缀和
}
}
for(int i=1;i<=n;i++)
{
ans[a[i]]++;
int id=a[i];
int mx=1;
for(int j=i+1;j<=n;j++)
{
//cout<mx || (cnt[j][a[j]]-cnt[i-1][a[j]]==mx && a[j]
AcWing 5031. 矩阵扩张
给定一个 1×1 的方格矩阵,方格为白色:
你需要对该矩阵进行 k 次扩张操作,并输出最终得到的矩阵。
扩张操作的具体规则如下。
首先,给定一个 n×n 的方格矩阵,其中的每个方格要么是白色,要么是黑色,称此矩阵为模板矩阵。
在进行扩张操作时,当前矩阵中的每个方格都将扩张为一个 n×n 的方格矩阵,其中:
下面举例进行说明。
令 n=2,k=3,模板矩阵如下所示:
每一次扩张时,每个白色方格会扩张为
每一次扩张时,每个黑色方格会扩张为
第 1 次扩张后,得到一个 2×2 的方格矩阵:
第 2 次扩张后,得到一个 22×22 的方格矩阵:
第 3 次扩张后,得到一个 23×23 的方格矩阵:
这就是最终得到的矩阵。
输入格式
第一行包含两个整数 n,k。
接下来 n 行,每行包含 n 个字符,每个字符要么为 .
,要么为 *
,其中第 i 行第 j 个字符用来描述模板矩阵第 i 行第 j 列的方格颜色,.
表示白色,*
表示黑色。
保证模板矩阵中至少包含一个白色方格。
输出格式
输出一个 nk×nk 的字符矩阵,用来表示最终得到的矩阵。
.
表示白色方格,*
表示黑色方格。
数据范围
所有测试点满足 2≤n≤3,1≤k≤5。
输入样例1:
2 3
.*
..
输出样例1:
.*******
..******
.*.*****
....****
.***.***
..**..**
.*.*.*.*
........
输入样例2:
3 2
.*.
***
.*.
输出样例2:
.*.***.*.
*********
.*.***.*.
*********
*********
*********
.*.***.*.
*********
.*.***.*.
#include
#include
#include
#include
using namespace std;
const int N = 5010;
char s[N][N],g[N][N];
char a[N][N];
int n,m,k;
int main()
{
cin>>n>>k;
int kk=k;
int m=n;
k--;
for(int i=0;i>a[i][j],s[i][j]=a[i][j];
}
while(k--){
for(int i=0;i