程序中禁止使用syscall rt_sigprocmask检查字符串是否可以完全由较小的给定字符串组成

时间:2015-10-02 13:25:00

标签: c algorithm

这是一个由在线评委评估的代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>

#define true 1
#define false 0

#define DICT_LENGTH 10

int dictionary_contains(char *s, char dict[][10]){
    int i;
    for(i=0;i<DICT_LENGTH;i++){
        if(!strcmp(dict[i], s))
            return true;
    }
    return false;
}

bool break_word(char *s, char dict[][10])
{
    int j;
    int len  = strlen(s);
    if(len==0)
    {
        //printf("1YES");
        return true;
    }
    bool wb[len+1];
    int k;
    for(k=0;k<len+1;k++)
    {
        wb[k]=false;
    }

    int i;
    for(i=1; i<=len; i++)
    {
        char *prefix = (char *)malloc(i+2);
        strncpy(prefix,s, i);
        prefix[i] = '\0';


        if(wb[i]==false && dictionary_contains(prefix,dict))
        {
            wb[i]=true;
            //printf("%s",prefix);
            //printf("%d",i);
        }
        if(wb[i]==true)
        {
            //printf("%d",i);
            if(i==len)
            {
                //printf("%d",i);
                //printf("3YES");
                return true;
            }
            for(j=i+1;j<=len;j++)
            {
                char *suffix  = (char *)malloc(len - i);
                    strncpy(suffix,s+i, j - i);
                suffix[j -i ] = '\0';
                //printf("\n%s",suffix);
                //printf("%d\n",j);

                if(wb[j]==false && dictionary_contains(suffix,dict)==true)
                {   wb[j]=true;
                    //  printf("%d",j);
                }

                if(j==len && wb[j]==true)
                {
                    //  printf("%s",suffix);
                    return true;
                }

        free(suffix);
            }
        }
        free(prefix);


    }
    return false;
}


int main(){
    int t,M,L,i;
    scanf("%d %d",&M,&L);
    char dict[1003][10];
    for (i = 0; i < M ;i++)  
        scanf("%s", dict[i]); 
    char string[100004];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",string);
        if( break_word(string, dict)==false)
            printf("NO\n");
        else
            printf("YES\n");
    }
    return 0;
}

不幸的是,它显示以下错误

Forbidden syscall rt_sigprocmask

即使它在我的本地编译器中工作正常。它是什么原因以及如何纠正它?

0 个答案:

没有答案