小白赛44,AB两题求助大佬

今天的小白月赛44属实给我这只大白整懵了,求大佬帮忙看看我的问题😥😥😥
很多遍了,感觉思路没问题可就是过不去,A、B都是这样,求助大佬
我的代码:(总是超时)
#define _CRT_SECURE_NO_WARNINGS
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
using namespace std;
struct node {
    int st;
    int end;
    int change;
}piece[100000 + 10];
bool cmp(node a, node b)
{
    if (a.change != b.change)
        return a.change >= b.change;
    else
        return a.st <= b.st;
}
int main()
{
    int t;
    cin >> t;
    int grade[100000 + 10];
    int ud[100000 + 10];
    while (t--)
    {
        memset(piece, 0, sizeof(piece));
        memset(grade, 0, sizeof(grade));
        memset(ud, 0, sizeof(ud));
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> grade[i];
            ud[i] = grade[i] - grade[i - 1];
        }
        int cnt = 0;
        int begin = 1;
        int finish = 1;
        int sum = 0;
        for (int i = 2; i < n + 1; i++)
        {
            if (ud[i] >= 0 && i < n + 1)
            {
                sum += ud[i];
                finish = i;
            }
            else
            {
                piece[cnt].st = begin;
                piece[cnt].end = finish;
                piece[cnt++].change = sum;
                begin = finish = i;
                sum = 0;
            }
        }
        sort(piece, piece + cnt - 1, cmp);
        int maxx = piece[0].change;
        for (int i = 0; i < cnt; i++)
        {
            if (piece[i].change == maxx)
                printf("%d %d ", piece[i].st, piece[i].end);
            else
            {
                printf("\n");
                break;
            }
        }
    }
    return 0;
}
B题目链接:B-顽皮恶魔_牛客小白月赛44 (nowcoder.com)
我的代码:(能过样例,开始用的memset初始化总是超时,后面改成简单的循环后wa了)
#define _CRT_SECURE_NO_WARNINGS
#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
    int t;
    int mark[1100][1100];
    cin >> t;
    while (t--)
    {
        int n, m, cnt;
        cin >> n>> m;
        for (int i = 0; i <= m+10 ; i++)
        {
            for (int j = 0; j <= n+10; j++)
            {
                mark[i][j]=0;
            }
        }
        cnt = n * m;
        char temp;
        int num = 0;
        while (1)
        {
            if (num >= cnt)
                break;
            temp = getchar();
            if (temp == '\n')
                continue;
            else
            {
                num++;
                if (temp == 'P')
                    mark[num / n + 1][num % n + 1]++;
                else if (temp == '*')
                {
                    int x = (num / n) + 1;
                    int y = (num % n) + 1;
                    for (int change = -1; change <= 1; change++)
                    {
                        mark[x + change][y - 1]--;
                        mark[x + change][y]--;
                        mark[x + change][y + 1]--;
                    }
                }
                else
                    continue;
            }
        }
        int sum = 0;
        for (int i = 1; i <= m ; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                if (mark[i][j] > 0)
                    sum ++;
            }
        }
        printf("%d\n", sum);
    }
    return 0;




全部评论
现在都静不下心看代码了
点赞 回复 分享
发布于 2022-02-11 12:58

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务