我很好奇,关于输入方法导致的错误,及本地编译和在线IDE的问题
查看原帖
我很好奇,关于输入方法导致的错误,及本地编译和在线IDE的问题
318004
yezl楼主2022/7/4 22:31

近一年没碰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读入。 代码大概就是先求一行得 n\texttt{n} ,然后算后 n-1\texttt{n-1} 行。知道getchar会多读个换行所以有多循环一次。本地样例过,提交WA。

数据下载,运行,答案一模一样……排查了好半天,想可能是测评机的锅,放尼谷在线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;
}
2022/7/4 22:31
加载中...