是不能用cin吗?为什么会0分啊

P1320 压缩技术(续集版)

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。。。改换个眼镜了。 感谢解答!


|