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
我也是