#5WA其他全TLE 大佬救一下啊

P1320 压缩技术(续集版)

Lemonrange @ 2022-09-24 00:26:37

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;

int main()
{
    char Arr[41000];
    int i = -1, size;
    int Count = 0;
//先吃掉第一行内容
    while (Arr[i]!='\n')
    {
        i++;
        scanf("%c", &Arr[i]);
    }
        Arr[i] = '\0';
//计算有多少行和列
    size = strlen(Arr);
//对剩下的元素吃入数组
    for (i = size; i < size*size; i++)
    {
        scanf("%c", &Arr[i]);
        if (Arr[i] == '\n')
        {
            i -= 1;
            continue;
        }
    }
//输出第一个码
    printf("%d ", size);

//遍历数组 找相同计数+1 不相同+1后printf 之后归零继续找
    for (i = 0; i < size*size; i++)
    {
    //找到最后两个时
        if (i + 1 == size * size-1)
        {
        //最后两个相同
            if (Arr[i + 1] == Arr[i])
            {
                Count += 2;
                printf("%d", Count);
                break;
            }
            //最后两个不相同
            if (Arr[i + 1] != Arr[i])
            {
                Count++;
                printf("%d ",Count);
                printf("1");
                break;
            }
        }
        //如果前一个和后一个相等
        if (Arr[i + 1] == Arr[i])
            Count++;
        //如果前一个和后一个不相等
        if (Arr[i + 1] != Arr[i])
        {
            Count++;
            printf("%d ", Count);
            Count = 0;
        }
    }
    return 0;
}

by Lemonrange @ 2022-09-24 10:34:47

睡一觉起来,自我解决了

我怀疑是

//先吃掉第一行内容
    while (Arr[i]!='\n')
    {
        i++;
        scanf("%c", &Arr[i]);
    }
        Arr[i] = '\0';
//计算有多少行和列
    size = strlen(Arr);
//对剩下的元素吃入数组
    for (i = size; i < size*size; i++)
    {
        scanf("%c", &Arr[i]);
        if (Arr[i] == '\n')
        {
            i -= 1;
            continue;
        }
    }

这一段码的问题,第一个while读入和后面的for遍历输入占时很高,导致tle了

或者说不一定是第一个while在某些条件下会无限循环直接Tle

后面改成的是这样的代码

//吃掉第一行的字符串
    scanf("%s", &Arr);
    size = strlen(Arr);
//对剩下的几行字符串吃掉 随后利用strcat相接入Arr数组里
    for (i = 0; i < size-1; i++)
    {
        char str[201];
        scanf("%s", &str);
        strcat(Arr,str);
    }

这样子就不会Tle了 但是会WA

其中原因就是如果第一行没0 起始是1 那么就要先输入有0个0 再输出1的个数

所以在下面那个for遍历数组找到有多少个0和1时 要特判起始为1的这个情况

很简单 在四个if前加一个特判if就可以了

        if (i == 0 && Arr[i] == '1')
        {
            printf("0 ");
            Count++;
            continue;
        }

这样就AC了

没想到睡一觉起来 精神好了 改一下就AC了(恼

没大佬来帮我(哭


|