2021-05-04

第一届河北工业大学程序设计竞赛校赛

比赛地址:https://ac.nowcoder.com/acm/contest/15703?from=acm_calendar

B-POOLING

题目大意:再一个nm的矩阵中用一个kk的矩阵窗口依次从左到右从上到下移动窗口,每次移动窗口记录这个窗口中最大值,构建出一个新的矩阵。

思路:数据不大暴力解决,可以用四重循环也可也写个函数,个人觉得写个函数更美。

代码:

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
typedef long long ll;
using namespace std;

int arr[55][55],k,n,m;
int f(int x,int y)
{
    int maxx=0;
    for(int i=x;i<x+k;i++)
    {
        for(int j=y;j<y+k;j++)
        {
            maxx=max(maxx,arr[i][j]);
        }
    }
    return maxx;
}
int main()
{
    int db[55][55];
    scanf("%d%d%d",&n,&m,&k);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    for(int i=0;i<n-k+1;i++)
    {
        for(int j=0;j<m-k+1;j++)
        {
            db[i][j]=f(i,j);
        }
    }
    printf("%d %d\n",n-k+1,m-k+1);
    for(int i=0;i<n-k+1;i++)
    {
        for(int j=0;j<m-k+1;j++)
        {
            printf("%d%c",db[i][j],j==m-k?'\n':' ');
        }
    }
    return 0;
}

F 回文串

题目大意:给你一个字符串现要将其分割,问你最少能分割成多少个回文串

思路:首先任何一个字符串一定能分割成若干个字符串,最极端就是将字符串分割成n个字符(n为字符串长度),现在问做少可以分割成多少个,我们只要统计有多少个成单出现的字符即可,因为成单出现的字符只能一个人构成字符或者放在回文串中间,所以有多少个成单出现的字符串就最少能构成多少回文串,最后特判一下成单的字符为0的情况。

代码:

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
typedef long long ll;
using namespace std;

char arr[1000005];
int db[1000];
int main()
{
    int cnt=0;
    scanf("%s",arr);
    for(int i=0; arr[i]; i++)
    {
        db[arr[i]]++;
    }
    for(int i=97; i<123; i++)
    {
        if(db[i]%2)
        {
            cnt++;
        }
    }
    cout<<max(cnt,1)<<endl;
    return 0;
}

上一篇:关于Kafka些测试消费类后,消费Kafka集群Brocker上得数据报错解决Marking the coordinator storage12.babel:7667 (id: 2147483645


下一篇:centos下安装与配置Apache方法