爆 0 求助,复制了题解的代码试了各种组合都跟我的代码算的结果一样

P1241 括号序列

exlporer @ 2020-04-23 21:41:52

爆 0,均为

Wrong Answer. wrong answer Too long on line 1.

这是不是说我的结果对了但是多输出了什么东西?

我把题解的代码复制下来,把我的代码和题解代码分别编译,试了各种括号组合,将结果重定向输出到两个文件,用 diff 对比两个文件,完全一样

u0_a138@localhost:~/C++^master ±
% g++ P1241.cpp                                                                                               20-04-23 - 21:28:11 

u0_a138@localhost:~/C++^master ±
% g++ tmp.cpp -o b.out                                                                                        20-04-23 - 21:34:23 
tmp.cpp:17:13: warning: add explicit braces to avoid dangling else [-Wdangling-else]
            else b[q[top--]]=' ';
            ^
1 warning generated.

u0_a138@localhost:~/C++^master ±
% ./b.out                                                                                                     20-04-23 - 21:34:30 
][][[]())]]()][(][)
[][][[]()()][]()[][]()[][]()%

u0_a138@localhost:~/C++^master ±
% ./b.out > 2                                                                                                 20-04-23 - 21:34:51 
][][[]())]]()][(][)

u0_a138@localhost:~/C++^master ±
% ./a.out                                                                                                     20-04-23 - 21:35:01 
][][[]())]]()][(][)
[][][[]()()][]()[][]()[][]()%

u0_a138@localhost:~/C++^master ±
% ./a.out > 1                                                                                                 20-04-23 - 21:35:10 
][][[]())]]()][(][)

u0_a138@localhost:~/C++^master ±
% diff 1 2                                                                                                    20-04-23 - 21:35:18 

u0_a138@localhost:~/C++^master ±
%  

下面是我的代码

/// P1241 括号序列
#include <iostream>
#include <stdio.h>

// 记录输入的括号, 本来想用栈但没用上
int stack[200];
// 记录是否已补全
bool ifC[200];
int k;

void push(char c){
    // 从 1 开始存
    stack[++k]=c;
}

// 用于生成补全对应的括号
char complete(char c){
    if(c==']') return '[';
    else if(c=='[') return ']';
    else if(c==')') return '(';
    else return ')';
}

void judge(){
    // 从输入的第一个括号扫描到最后一个
    for(int i=1,tmp,c;i<=k;++i){
        // 如果是右括号
        if(stack[i]==')' or stack[i]== ']'){
            // 记录当前扫描的位置
            tmp=i;
            // 取得对应的左括号
            c=complete(stack[i]);
            // 从左边一个括号开始向左扫描
            --tmp;
            while(tmp>0){

                // 打log
                if(false){
                    for(int z=1;z<=k;++z){
                        printf("%d",ifC[z]);
                    }
                    std::cerr<<(char)stack[i]<<i<<'\n';
                }

                // 找到第一个左括号
                if(stack[tmp]=='(' or stack[tmp]=='['){
                    // 如果还没有被补全过
                    if(ifC[tmp]==false){
                        // 如果匹配
                        if(c==stack[tmp]){
                            // 标记已匹配
                            ifC[i]=true;
                            ifC[tmp]=true;
                        }
                        // 停止寻找左括号
                        break;
                    }
                }
                // 匹配下一个右括号
                --tmp;
            }
        }
    }
}

char c[200];

int main(){
    int i=0;
    while(true){
        scanf("%c",&c[++i]);
        if(c[i]=='\n'){
            --i;
            break;
        }else{
            push(c[i]);
        }
    }

    // 打log
    if(false)
        std::clog<<"i:"<<i<<std::endl;

    judge();

    // 输出
    for(int j=1;j<=i;++j){
        // 如果需要补全
        if(ifC[j]!=true){
            // 如果是左括号
            if(stack[j]=='(' or stack[j]=='['){
                printf("%c",stack[j]);
                printf("%c",complete(stack[j]));
            }else{
                // 如果是右括号
                printf("%c",complete(stack[j]));
                printf("%c",stack[j]);
            }
        }else{
            // 原样输出
            printf("%c",stack[j]);
        }
    }
    return 0;
}

by Thomas_Cat @ 2020-04-23 21:42:21

这里有人抄题解啊啊啊啊啊


by YUYGFGG @ 2020-04-23 21:44:44

@exlporer 硬 核 查 错


by 热言热语 @ 2020-04-23 21:47:45

借楼提问,为啥 Ubuntu 有时运行程序结尾会多显示一个百分号(像上面一样)?


by exlporer @ 2020-04-23 21:54:05

@热言热语 根据我的观察,可能是提醒你百分号以后的东西都不是程序输出的结果了。如果你在最后输出了换行符,就不会有百分号,否则的话就是百分号再自动换行


by Vocalise @ 2020-04-23 21:59:33

@热言热语 百分号就是zsh的特性罢,提醒你程序跑完了的


by 热言热语 @ 2020-04-23 22:02:04

@exlporer @void_basic_learner 谢谢两位 dalao


|