AcWing第 105 场周赛

AcWing 5029. 极值数量

给定一个长度为 n 的整数数组 a1,a2,…,an。

如果一个元素左右两边均有相邻元素(也就是不位于数组的两端),且满足以下两个条件之一:

  • 该元素的值严格大于其左右相邻元素的值
  • 该元素的值严格小于其左右相邻元素的值

则称该元素为一个极值元素。

请你计算,给定数组中有多少个极值元素。

输入格式

第一行包含整数 n。

第二行包含 n 个整数 a1,a2,…,an。

输出格式

一个整数,表示极值元素的数量。

数据范围

前 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 的方格矩阵:

AcWing第 105 场周赛_第1张图片

第 3 次扩张后,得到一个 23×23 的方格矩阵:

AcWing第 105 场周赛_第2张图片

这就是最终得到的矩阵。

输入格式

第一行包含两个整数 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

你可能感兴趣的:(AcWing,算法)