yezl @ 2022-07-04 22:31:00
近一年没碰OI,重拾,练手,结果这题一堆WA直接给我整不会了……
这是0 pts代码(然鹅可能并没有错):
#include<bits/stdc++.h>
using namespace std;
const int N=205;
char ch;
int n=1,k=1,a[N],tt;
bool f;
int main()
{
//freopen("ans.txt","w",stdout);
ch=getchar();
f=ch-'0';
if(f) a[++tt]=0;
while(ch=getchar())
{
if(ch=='1')
{
if(!f) a[++tt]=k,k=0;
++k,++n,f=1;
}
else if(ch=='0')
{
if(f) a[++tt]=k,k=0;
++k,++n,f=0;
}
else break;
}
printf("%d ",n);
for(register int i=1;i<=tt;++i)
printf("%d ",a[i]);
for(register int i=1;i<n;++i)
{
for(register int j=0;j<=n;++j)
{
ch=getchar();
if(ch=='1')
{
if(!f)
{
printf("%d ",k);
k=0;
}
++k,f=1;
}
else if(ch=='0')
{
if(f)
{
printf("%d ",k);
k=0;
}
++k,f=0;
}
}
}
printf("%d ",k);
return 0;
}
因为稍快,所以平时习惯用getchar读入。
代码大概就是先求一行得
数据下载,运行,答案一模一样……排查了好半天,想可能是测评机的锅,放尼谷在线IDE上跑,结果——
5 0 5 2 1 2 5 2 1 2 2 (IDE结果)
5 0 5 2 1 2 5 2 1 2 5 (答案)
5 0 5 2 1 2 5 2 1 2 5 (本地输出)
这就不能理解了呀。。getchar改成scanf照样不行(都会读换行)最后无奈换成cin直接给我过了……
想问一下问题究竟出在哪? 考场上如果遇到这种情况怎么办呢?本地一直试可能也找不出问题吧。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int N=205;
char ch;
int n=1,k=1,a[N],tt;
bool f;
int main()
{
//freopen("ans.txt","w",stdout);
ch=getchar();
f=ch-'0';
if(f) a[++tt]=0;
while(ch=getchar())
{
if(ch=='1')
{
if(!f) a[++tt]=k,k=0;
++k,++n,f=1;
}
else if(ch=='0')
{
if(f) a[++tt]=k,k=0;
++k,++n,f=0;
}
else break;
}
printf("%d ",n);
for(register int i=1;i<=tt;++i)
printf("%d ",a[i]);
for(register int i=1;i<n;++i)
{
for(register int j=1;j<=n;++j)
{
cin>>ch;
if(ch=='1')
{
if(!f)
{
printf("%d ",k);
k=0;
}
++k,f=1;
}
else if(ch=='0')
{
if(f)
{
printf("%d ",k);
k=0;
}
++k,f=0;
}
}
}
printf("%d ",k);
return 0;
}
by panyanppyy @ 2022-07-04 22:46:05
用getchar的话可以行末多读一个字符
by yezl @ 2022-07-04 23:23:06
@panyanppyy 问题是……我的行末确实有多读一个字符哦。。。之前也有遇到过很多这种情况,一般是多读个就行啦,但这次直接给我翻了。
by panyanppyy @ 2022-07-05 07:10:01
@yezl 洛谷数据最后有两个换行,一个是\n
一个是\r