10个TLE...大佬们99我

P1320 压缩技术(续集版)

yamakaze @ 2020-07-06 01:14:07

10个TLE...把我看傻了

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    bool s;      //最后判断是在数1还是0
    char a[40000]={'\0'},b;
    int i,j,k;
    for(i=0;(b=getchar())!='\n';i++)
    {
        a[i]=b;  
    }
    j=i;
   //↑先把第一行录入数组,顺便判断一行几个字符
    for(i=j-1;i<j*j-1;)
    {
        if((b=getchar())!='\n')
        {
            i++;
            a[i]=b;
        }
    }
   //↑将后续各行的字符滤掉换行符并录入数组
    cout<<j<<" "; //输出每行字符数
    for(i=0,k=0,s=false;a[i]!='\0';)
    {
        if(!s&&a[i]=='0')
        {
            k++;i++;
        }
        else if(s&&a[i]=='1')
        {
            k++;i++;
        }
        else
        {
            cout<<k<<" ";
            k=0;
            s=!s;
        }
    }
  //↑0和1交替计数并输出数目
    cout<<k; 
  //↑输出最后一个被上面循环落下的最后一个数目
    return 0;
}

第一组输入和输出分别是

11111

00100

11111

00100

11111(输入)

5 0 5 2 1 2 5 2 1 2 5 (输出)

才5x5,怎么会超时呢...大佬们帮我康康罢.


by yamakaze @ 2020-07-06 01:16:55

本地也能正常输出的说


by garethhkm2023 @ 2020-07-06 02:47:04

線上ide也沒問題 :/


by garethhkm2023 @ 2020-07-06 03:49:15

wasai我明白了

在某些烂系统上新行是\r\n而不(只)是\n

所以你输入数据的部分会错误判断输入长度等等

解决方法:把 ...!='\n'换成...>='0'


by qss_ @ 2020-07-06 08:54:48

@garethhkm2023 是>= '\0'吧?


by yamakaze @ 2020-07-06 12:09:12

@garethhkm2023 淦!大佬牛啤!


by garethhkm2023 @ 2020-07-06 20:17:41

@王蓝棋俊 ‘0’是数字零 就包括我们想要的‘0’和‘1’而不包括'\n','\r'

'\0'是空字符


by qss_ @ 2020-07-06 20:46:50

@garethhkm2023 知道了,我没读题...只是根据经验推测(逃


|