zoj 1011 NTA

数据读入可真让我想了好半天,酝酿好久才敢开写,又一次证明小心总是没错的。

过了样例后,一直WA,奇怪了好久,看了网上的代码才想起,我忘了清vector了,吃一堑长一智吧。。。。。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
#define MAX 151
using namespace std;
typedef struct node{
    int a,b;
    };
int n,m,k,L,r[2050];
vector<node> tab[MAX][MAX];
void readIn(){
    int i,j,x,t;
    char c;
    node q;
    for(i=0;i<n;i++){
        for(j=0;j<k;j++){
            x=0;  t=0;  c=getchar();
            while(c!='\n'){
                if(c>='0'&&c<='9'){
                    x*=10;  x+=(c-'0');
                }else{
                    if(t%2==0)q.a=x;
                    else {
                        q.b=x;
                        tab[i][j].push_back(q);
                    }
                    t++,x=0;
                }
                c=getchar();
            }
            q.b=x;
            tab[i][j].push_back(q);
        }
    }
}
int func(int x,int y){
    int i,j;
    node h;
    if(r[y*2]==-1&&r[y*2+1]==-1){
        for(i=0;i<tab[x][ r[y] ].size();i++){
            h=tab[x][ r[y] ].at(i);
            if(h.a>=n-m&&h.b>=n-m)return 1;
        }
    }else{
        for(i=0;i<tab[x][ r[y] ].size();i++){
            h=tab[x][ r[y] ].at(i); 
            if(func(h.a,y*2)==1&&func(h.b,y*2+1)==1)
                return 1;
        }       
    }
    return 0;
}                            
int main(){
    int i,j,t,cas=0; char c; node x;
    while(scanf("%d %d %d",&n,&m,&k),n&&m&&k){
        if(cas>0)printf("\n");
        getchar();
        for(i=0;i<MAX;i++)
            for(j=0;j<MAX;j++)tab[i][j].clear();
        readIn();  
        printf("NTA%d:\n",++cas);
        while(scanf("%d",&L)&&L!=-1){
            getchar();
            j=1;
            memset(r,-1,sizeof(r));
            for(i=0;i<=L;i++){
                c=getchar();
                while(c!='\n'){
                    if(c!=' '){ 
                        if(c!='*') r[j++]=c-'a';
                        else j++;
                    }
                    c=getchar();
                }
            } 
            if(func(0,1)==1)printf("Valid\n");
            else printf("Invalid\n");
        }
    }       
    return 0;
}

你可能感兴趣的:(dp,ZOJ)