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