样例通过了,为什么会超时???

P1319 压缩技术

youcaiyoujuan @ 2024-02-29 20:03:19

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int a[205][205];
int b[10000];
bool visit[10000];
int main()
{
    int n,count = 0,cnt = 0,flag = 0,p = 0;
    cin >> n;
    for(int i = 0;;i++) 
    {
    if(cin.get() == '\n') break;//回车结束输入 
    cin >> b[i];//将数据依次存入数组 
    }
    for(int j = 1;j <= n;j++)
    for(int m = 1;m <= n;m++)
    {
            while(b[p] == 0&&visit[p] == 0)//判断压缩码是否为0 
            {
                if(cnt == 0) cnt = 1;//将点阵上的1和0互换进行赋值 
                else cnt = 0;
                visit[p] = 1;//表示已访问 
                p++;//下一个压缩码 
            }
                    a[j][m] = cnt;//对二维数组依次赋值0或1 
                    count++;//依次赋值统计次数
           if(count == b[p]&&visit[p] == 0)//若次数满足压缩码 
                {  
                   count = 0;//次数归为0 
                   if(cnt == 0) cnt = 1;//0和1互换赋值 
                   else cnt = 0;
                   visit[p] = 1;
                   p++;//下一个压缩码 
                }

    }
    for(int k = 1;k <= n;k++)
    {
        for(int l = 1;l <= n;l++)
        cout << a[k][l];
        cout << endl;
    }
    return 0;
}

by Hagasei @ 2024-02-29 20:08:21

@youcaiyoujuan 数据最后没有换行。应把输入写成

for(int i = 0; cin>> b[i] ;i++) ;

by Hagasei @ 2024-02-29 20:09:05

cin 会返回是否读入成功


by 杜都督 @ 2024-02-29 20:12:54


for(int i = 0;i<n*n;i++) 
    {
    //if(cin.get() == '\n') break;//回车结束输入 
    cin >> b[i];//将数据依次存入数组 
    }

by zhangyicheng1010 @ 2024-02-29 20:16:05

直接捧代码:

#include<bits/stdc++.h>//万能头
using namespace std;
int n,a,t;//基本的定义,不用管
bool s;
int main(){
    cin>>n;
    while(cin>>a){//不知道输入几个就一直输入
        for(int i=1;i<=a;i++){
            cout<<s;
            t++;//计数器:目前输入了几个数
            if(t%n==0){\\当它一行满了时,就换行
                cout<<endl;
            }
        }
        s=!s;
    }
    return 0;
}

by zhangyicheng1010 @ 2024-02-29 20:17:04

@youcaiyoujuan


by youcaiyoujuan @ 2024-02-29 20:20:16

@杜都督 如果输入的压缩码有多个0怎么办,不是回车结束输入吗


by youcaiyoujuan @ 2024-02-29 20:21:03

@DAVID1010 题解我看过,我想知道此代码为什么会超时


by youcaiyoujuan @ 2024-02-29 20:22:33

@Hagasei 太感谢了


by 杜都督 @ 2024-02-29 21:10:32

@youcaiyoujuan

没太理解你的意思,像我这样改是可以AC的,因为原码就是n*n位,那么索性就接收n*n位压缩码输入,这样是不会出错的,就算多余出若干次没有输入的循环也不会影响后续代码


by Steve15312 @ 2024-10-27 09:03:05

洛谷上的回车不是\n,是两个字符\r\n,所以检测\n结束输入结束不了


|