下载了测试点,输出都没问题,可是全WA,怎么回事???

P1320 压缩技术(续集版)

justinjia @ 2020-11-21 11:04:40

献上代码:

#include"iostream"
#include"stdio.h"
#include"math.h"
#include"string"
using namespace std;
int main(void){
  string t,a="";
  getline(cin,a);
  const int L=a.size();
  for(int i=1;i<L;i++){
    getline(cin,t);
    a+=t;
  }
  a="0"+a;
  int n,s,k,num[40000];
  n=s=k=0;
  for(int i=1;i<a.size();i++){
    if(a[i]!=a[i-1]){
      num[n++]=k;
      s+=k;
      k=0;
    }
    k++;
  }
  num[n++]=k;
  s+=k;
  printf("%d ",int(sqrt(s)));
  for(int i=0;i<n;i++)
    printf("%d ",num[i]);
  return 0;
}

by justinjia @ 2020-11-21 11:05:07

至少第一个测试点没问题。


by xxx听取AC声一片 @ 2020-11-21 11:20:07

你“a="0"+a;”是把a转换为了数字类型,但是这样会把前导0删掉。

例如

输入:

0 0 0
0 1 0
0 0 0

a=000010000

a+='0'=10000


by xxx听取AC声一片 @ 2020-11-21 11:23:57

应该定义一个数组c

将a='0'+a换成以下代码:

for(int i=0;i<a.size();i++)
   c[i]=a[i]-'0';

然后统计


by justinjia @ 2020-11-21 12:00:15

@tt100123 不是吧,我记得string类型中,+的意思是合并两个字符串啊。


by justinjia @ 2020-11-21 12:01:26

@tt100123 可是下载了测试点,输出都没问题,我认为它没有理由判我错(洛谷日爆了???)。


by justinjia @ 2020-11-21 12:49:38

也就意味着a="0"+a不会把a转换为数字类型。


by xxx听取AC声一片 @ 2020-11-22 13:43:19

我差点忘了


by ld2002 @ 2021-01-13 13:31:35

我也是


|