小白赛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; 