求助 本地能过样例 提交却0分

P1320 压缩技术(续集版)

JamesZhan @ 2023-06-28 17:04:44

这是我的评测记录,我本地能过样例,下载了数据,和本地能一模一样,提交了就全是RE和WA

#include<bits/stdc++.h>
using namespace std;
int g[40220];
int main(){
    char a,b='9',cnt=0,cnt2=0;
    bool flag=0;
    int n=999999999;
    for(int i=0;i<n*n+n;i++){
        a=getchar();
        if(a=='1'&&i==0){g[0]=0;cnt2++;}
        if(a=='\n'&&!flag){n=i;flag=1;continue;}
        else if(a=='\n')continue;
        if(a==b)cnt++;
        else if(i!=0){g[cnt2]=cnt+1;cnt=0;cnt2++;}
        b=a;
    }
    g[cnt2]=cnt+1;
    cout<<n<<' ';
    for(int i=0;i<=cnt2;i++){
        cout<<g[i]<<' ';
    }
    cout<<endl;
    return 0;
}

by microchip @ 2023-06-28 17:15:38

@JamesZhan 哥啊,你样例都没过啊

看了一遍你的代码感觉思路似乎是错的


by microchip @ 2023-06-28 17:19:19

你试图给你写的每一行代码加一个注释,不仅让人容易读懂你的思路,也可能让你当场发现你哪里有问题


by JamesZhan @ 2023-06-28 17:55:44

@microchip 好的,加好注释了,可能我的思路有点乱,不好意思

#include<bits/stdc++.h>
using namespace std;
int g[40220];//g数组用来存储每一段1或0连续出现的次数
int main(){
    char a,b='9',cnt=0,cnt2=0;//a为当前读入数据,b为上一个,cnt为当前连续次数,cnt2用来记录g数组的下标
    bool flag=0;//flag判断是否为第一次读入换行
    int n=999999999;//这里n先开得足够大,这样后面的循环就不会过早结束,因为思路是在读入的同时得到n
    for(int i=0;i<n*n+n;i++){//i<n*n+n是因为数字的n*n加上每行末尾的换行符
        a=getchar();//存入a
        if(a=='1'&&i==0){g[0]=0;cnt2++;}//如果存入的第一个数是1的话,那么意味前面有0个0,所以第一个输出为0,同时下标后移
        if(a=='\n'&&!flag){n=i;flag=1;continue;}//如果存入第一个换行符,记录下当前的i,作为n,并continue
        else if(a=='\n')continue;//如果已经出现过换行符,则直接跳过
        if(a==b)cnt++;//如果与上一个字符一样,则数字连续次数+1
        else if(i!=0){g[cnt2]=cnt+1;cnt=0;cnt2++;}//如果不一样的话,就将当前重复次数存入数组,下标+1,重复次数清零
        b=a;//更新
    }
    g[cnt2]=cnt+1;//结束循环后,最后一段重复的1或0还啊没有存入,现在存进去
    cout<<n<<' ';//输出n
    for(int i=0;i<=cnt2;i++){
        cout<<g[i]<<' ';
    }
    cout<<endl;
    return 0;
}

by microchip @ 2023-06-29 09:25:04

@JamesZhan

emmmm我好像知道哪里有问题了

你看看你发的上一个这道题的帖子就知道了

所以你试试用string重写一次


by AT_WHY_ZD @ 2023-07-03 22:01:29

对了吗


by JamesZhan @ 2023-07-22 15:04:05

@xdluogu_wan 早过乐,用string


|