本人亲测(使用Dev-C++)与输出都一样,为什么判我错?
查看原帖
本人亲测(使用Dev-C++)与输出都一样,为什么判我错?
373226
justinjia楼主2021/1/22 10:00

11个出错测试点编号:#7\#7

11个出错测试点状态:WA\colorbox{red}{\color{white}WA}

代码:

#include"stdio.h"
#include"iostream"
#include"string"
#include"string.h"
using namespace std;
bool check_err(string code){
	int buckets[26];
	memset(buckets,0,sizeof(buckets));
	int cnt=0;
	char tmp[100];
    for(int i=0;i<code.size();i++){
        if(code[i]=='F'){
        	buckets[code[i+2]-'a']++;
        	tmp[cnt++]=code[i+2];
        }else if(code[i]=='E')
            buckets[tmp[--cnt]-'a']--;
    }
    if(cnt)
    	return 1;
    for(int i=0;i<26;i++)
    	if(buckets[i]>0)
    		return 1;
    return 0;
}
bool check_time(string code,string time_){
    time_.erase(0,2);//擦除O(
    time_.erase(time_.size()-1,1);//擦除)
    int _time;
    if(time_=="1")
    	_time=0;
    else{
    	time_.erase(0,2);//擦除n^
    	_time=0;
    	for(int i=0;i<time_.size();i++){
    		_time*=10;
    		_time+=time_[i]-'0';
		}
	}
    int correct_time=0,cnt=0,tmp[100],k=0;
    int flag=101;
    for(int i=0;i<code.size();i++){
    	if(code[i]=='F'){
    		string a="",b="";
    		while(code[i+4]>='0'&&code[i+4]<='9'||code[i+4]=='n'){
    			a+=code[i+4];
    			code.erase(i+4,1);
			}
			code.erase(i+4,1);
			while(code[i+4]>='0'&&code[i+4]<='9'||code[i+4]=='n'){
				b+=code[i+4];
				code.erase(i+4,1);
			}
			if(a=="n"&&b=="n"){
				tmp[k++]=cnt;
			}else if(a=="n"&&b!="n"&&flag==101){
				tmp[k++]=cnt;
				flag=cnt;
			}else if(a!="n"&&b=="n"){
				cnt++;
			}else if(a!="n"&&b!="n"){
				int A=0,B=0;
				for(int j=0;j<a.size();j++){
					A*=10;
					A+=a[j]-'0';
				}
				for(int j=0;j<b.size();j++){
					B*=10;
					B+=b[j]-'0';
				}
				if(B<A&&flag==101)
					flag=cnt;
				else
					tmp[k++]=cnt;
			}
		}else if(code[i]=='E'){
			if(cnt==tmp[k-1])
				k--;
			else{
				cnt--;
				if(cnt<=flag)
					flag=101;
			}
		}
		if((cnt<flag?cnt:flag)>correct_time)
			correct_time=(cnt<flag?cnt:flag);
	}
	return correct_time==_time;
}
int main(void){
    int t;
    scanf("%d",&t);
    for(int i=0;i<t;i++){
        string code="",time_,tmp;
        int line;
        scanf("%d",&line);
        cin>>time_;
        getline(cin,tmp);
        for(int j=0;j<line;j++){
            getline(cin,tmp);
            code+=tmp;
        }
        if(check_err(code))
            printf("ERR\n");
        else if(check_time(code,time_))
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

该测试点用例输入:

3
44 O(n^3)
F a 42 50
F b 42 n
F c 39 77
F d 61 99
F e 36 37
F f n 28
F g 26 n
F h n 1
F i 68 n
F j 74 n
F k 51 n
F l 72 n
F m 4 n
F o 16 n
E
E
E
E
E
E
E
E
E
E
E
E
E
E
F a 10 59
F b 36 n
F c 61 76
F d 56 62
F e 28 n
F f 14 62
F g 69 n
F h 41 97
E
E
E
E
E
E
E
E
68 O(n^9)
F a 87 92
F b 70 n
F c 39 n
F d 69 n
F e 53 92
F f 86 n
F g 31 n
F h 48 90
F i 10 n
F j 64 n
F k 20 n
F l 33 n
F m n 63
E
E
E
E
E
E
E
E
E
E
E
E
E
F a 14 92
F b 74 n
F c 55 n
F d 9 n
F e 77 93
F f 61 63
F g 75 n
F h 29 56
F i 49 n
F j 65 n
F k 51 99
F l 64 n
F m 21 38
E
E
E
E
E
E
E
E
E
E
E
E
E
F a 13 n
F b 61 n
F c 34 n
F d 39 n
F e 14 n
F f 60 n
F g 25 43
F h 7 n
E
E
E
E
E
E
E
E
74 O(n^11)
F a 31 n
F b 31 n
F c 70 32
F d 35 92
F e 56 n
F f 64 n
F g 35 n
F h 25 n
F i 63 n
F j 2 n
F k 68 70
E
E
E
E
E
E
E
E
E
E
E
F a 53 59
F b 84 85
F c 17 n
F d 47 n
F e 20 57
F f 90 94
F g 90 98
F h 46 n
F i 44 n
F j 24 n
F k 9 n
E
E
E
E
E
E
E
E
E
E
E
F a 41 n
F b 2 48
F c 32 n
F d 43 n
F e 68 n
F f 53 n
F g 18 86
F h 20 n
F i 56 n
F j 87 n
F k 51 n
F l 90 94
F m 82 n
F o 55 n
F p 70 87
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E

用例输出:

Yes
Yes
Yes

我的输出:

Yes
Yes
Yes

求大佬解答为什么评测姬会判我错?

2021/1/22 10:00
加载中...