weiming3 @ 2023-02-25 23:18:20
#include <iostream>
#include<algorithm>
#include <math.h>
using namespace std;
int main() {
char a[4001];
int t = 0;
while (cin >> a[t]) {
t++;
}
if(a[t-1]=='\n'){
t--;}
cout << sqrt(t) << " ";
int m = a[0] - '0';
int tmp = 0;
for (int i = 0; i <= t - 1; i++) {
if (a[i] - '0' == m) {
tmp += 1;
} else {
cout << tmp << " ";
tmp = 1;
m ^= 1;
}
}
return 0;
}
本地的测试样例没有问题啊,为什么到Oj上会0分
by ud2_ @ 2023-02-25 23:40:17
@weiming3
第一个数表示连续有几个 0
比如,输入
101
000
101
的输出是 3 0 1 1 1 3 1 1 1
by weiming3 @ 2023-02-25 23:41:49
@ud2_ 我刚刚明白你的意思了,现在改成如下
#include <iostream>
#include<algorithm>
#include <math.h>
using namespace std;
int main() {
char a[4001];
int t = 0;
while (cin >> a[t]) {
t++;
}
//if(a[t-1]=='\n'){
// t--;}
cout << sqrt(t) << " ";
int m = 0;
int tmp = 0;
for (int i = 0; i <= t - 1; i++) {
if (a[i] - '0' == m) {
tmp += 1;
} else {
cout << tmp << " ";
tmp = 1;
m ^= 1;
}
}
cout<<tmp;
return 0;
}
但是还是只有70分。。。这两道题都是一个分,是不是都遗漏了什么特殊情况
by ud2_ @ 2023-02-25 23:42:36
@weiming3 最后,N ≤ 200 说明最多有 40000 个字符,改掉之后应该就过了。
by weiming3 @ 2023-02-25 23:49:40
@ud2_ 为什么你给的测试用例是1开始,我可以理解为没有这种1开始的测试用例吗?(因为最开始的写法就是考虑了他可能是以1或者0开头)
by ud2_ @ 2023-02-25 23:53:58
题目的意思是把“以 1 开始”看作“以 0 个 0 开始”。
by weiming3 @ 2023-02-26 00:13:54
@ud2_ 实在找不到哪里出了问题,chatgpt也没诊断出来,0开头的测试用例编出来都通过了
by ud2_ @ 2023-02-26 00:14:45
@weiming3 40000 > 4000。
by weiming3 @ 2023-02-26 00:17:33
@ud2_ 我是sn。。。改换个眼镜了。 感谢解答!