第1039题有bug,给的错误用例与本地对比是一致的
  • 板块工单反馈版
  • 楼主xianzhi
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/7/27 00:21
  • 上次更新2023/11/4 13:12:21
查看原帖
第1039题有bug,给的错误用例与本地对比是一致的
492439
xianzhi楼主2021/7/27 00:21

我下载了第一个错误用例,测试得到结果是HELLO, 与给出的标准答案一致,不知道为什么是错的? 以下是我的代码。

#include<bits/stdc++.h>
using namespace std;
vector<string> get(string s){
    vector<string>ans;
    string t;
    for(char c:s){
        if(c==' '){
            ans.push_back(t);
            t = "";
        }
        else t.push_back(c);
    }
    ans.push_back(t);
    if(!ans[0].empty())ans[0].pop_back();
    return ans;
}
int main(){
    int i,j,n,m,p;
    scanf("%d%d%d",&m,&n,&p);
    vector<string>name(m);
    unordered_map<string,int>order;
    unordered_map<string,int>week = {{"Monday.",0},{"Tuesday.",1},{"Wednesday.",2},{"Thursday.",3},{"Friday.",4},{"Saturday.",5},{"Sunday.",6}};
    for(i=0;i<m;++i){
        cin>>name[i];
        order[name[i]] = i;
    }
    getchar();
    vector<vector<string>>d(p);
    string s;
    for(i=0;i<p;++i){
        getline(cin,s);
        d[i] = get(s);
    }
    int cp = 0, fan = -1;
    for(i=0;i<m;++i){
        for(j=0;j<7;++j){
            vector<int>sen(m);
            bool flag = 0;
            for(int k=0;k<p;++k){
                if(d[k].size()==4&&order.count(d[k][0])&&d[k][1]=="I"&&d[k][2]=="am"&&d[k][3]=="guilty."){
                    if(order[d[k][0]]==i){
                        if(sen[i]==-1){
                            flag = 1;
                            break;
                        }
                        sen[i] = 1;
                    }
                    else if(sen[order[d[k][0]]]==1){flag = 1;break;}
                    else sen[order[d[k][0]]] = -1;
                }
                else if(d[k].size()==5&&order.count(d[k][0])&&d[k][1]=="I"&&d[k][2]=="am"&&d[k][3]=="not"&&d[k][4]=="guilty."){
                    if(order[d[k][0]]==i){
                        if(sen[i]==1){
                            flag = 1;
                            break;
                        }
                        sen[i] = -1;
                    }
                    else if(sen[order[d[k][0]]]==-1){flag = 1;break;}
                    else sen[order[d[k][0]]] = 1;
                }
                else if(d[k].size()==4&&order.count(d[k][0])&&order.count(d[k][1])&&d[k][2]=="is"&&d[k][3]=="guilty."){
                    if(order[d[k][1]]==i){
                        if(sen[order[d[k][0]]]==-1){
                            flag = 1;
                            break;
                        }
                        sen[order[d[k][0]]] = 1;
                    }
                    else if(sen[order[d[k][0]]]==1){flag = 1;break;}
                    else sen[order[d[k][0]]] = -1;
                }
                else if(d[k].size()==5&&order.count(d[k][0])&&order.count(d[k][1])&&d[k][2]=="is"&&d[k][3]=="not"&&d[k][4]=="guilty."){
                    if(order[d[k][1]]==i){
                        if(sen[order[d[k][0]]]==1){
                            flag = 1;
                            break;
                        }
                        sen[order[d[k][0]]] = -1;
                    }
                    else if(sen[order[d[k][0]]]==-1){flag = 1;break;}
                    else sen[order[d[k][0]]] = 1;
                }
                else if(d[k].size()==4&&order.count(d[k][0])&&d[k][1]=="Today"&&d[k][2]=="is"&&week.count(d[k][3])){
                    if(week[d[k][3]]==j){
                        if(sen[order[d[k][0]]]==-1){
                            flag = 1;
                            break;
                        }
                        sen[order[d[k][0]]] = 1;
                    }
                    else if(sen[order[d[k][0]]]==1){flag = 1;break;}
                    else sen[order[d[k][0]]] = -1;
                }
            }
            if(flag)continue;
            int c1 = 0, c2 = 0;
            for(int k=0;k<m;++k){
                if(sen[k]==-1)++c1;
                else if(sen[k]==0)++c2;
            }
            if(c1<=n&&c1+c2>=n){
                ++cp;
                fan = i;
                break;
            }
        }
        if(cp>1)break;
    }
    if(cp>1)puts("Cannot Determine");
    else if(cp==0)puts("Impossible");
    else cout << name[fan] <<endl;
    return 0;
}

提供的错误输入用例为

2 2 4
HELLO
GUILTY
HELLO: What is your name?
GUILTY: I am GUILTY.
GUILTY: Are you guilty?
HELLO: I am not guilty.
2021/7/27 00:21
加载中...