2016广东工业大学第一次月赛 b题

Problem B: Linux的文件权限对不对?

Description

在还没给deepin做dde的arch移植之前,felixonmars迷上了Linux的命令行,因为这看起来特别炫,不用鼠标、只是在键盘里输入字符也能使用电脑。虽然界面在发展,但是felixonmars还是很努力地学习使用纯字符的命令。 最近cxbii小浣熊和jingle格格巫教会了felixonmars两个命令(假设felixonmars已经在 /home 目录下新建了一个 ACM.txt 的文件。)

(一)ls -l ACM.txt

(二)chmod 【***】 ACM.txt

第一个命令会显示ACM.txt这个文件的属性。【r】指“读”权限,【w】指“写”权限,【x】指“执行”权限,【-】指没有任何权限。 显示的结果例如“-rw-rw-r--”,从第二个字符开始,每三个字符为一组,第一组是felixonmars的权限,第二组是felixonmars所属组的权限,第三组是其他人的权限。(第一个字符必须是‘-’) 第二个命令可以改变文件的权限,【***】指一个三位数。第一个数字指felixonmars的权限,第二个指felixonmars所属组的权限,第三个指其他人的权限。 数字与权限表示的对应关系如下(注意没有 --- = 0 的对应关系) r-- = 4 -w- = 2 --x = 1 rw- = 6 r-x = 5 -wx = 3 rwx = 7

Input

输入文件的第一行是一个整数T,表示有T组数据。 接下来是T组数据,每个数据有两行,第一行是命令(二)中的数字,第二行是表示文件权限的字符串。

Output

数字和字符串表示含义一致,则输出“Yes”(不带双引号),否则输出“No”

Sample Input

4666-rw-rw-rw-777wrwxrwxrwx888-r--r--r--111-r--r--r-x

Sample Output

YesNoNoNo

HINT

代码:

[cpp]  view plain  copy
  1. #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    using namespace std;
    int t,l,e,f,d;
    char a[12],m[10];
    int r[4];
    string c[]={"","--x","-w-","-wx","r--","r-x","rw-","rwx"};


    string s[4];
    int main()
    {
        while(cin>>t&&t)
        {
            for(int i=0;i<t;i++)
            {
    e=0;


                scanf("%s%s",m,a);
                if(a[0]!='-')
                    {cout<<"No"<<endl;
                    continue;
                    }
                    r[0]=m[0]-'0';
                    r[1]=m[1]-'0';
                    r[2]=m[2]-'0';
                 for(int i=0;i<3;i++)
                 {
                     s[i].clear();
                 }
                  for(int i=1;i<strlen(a);i++)
                   {
                       s[e]+=a[i];
                       if(i%3==0)
                       {
                          e++;
                       }




                   }
    d=0;
                   for(int i=0;i<3;i++)
                   {
                       //cout<<s[i]<<endl;
                       f=r[i];
                       if(f>7)
                        break;
                       if(c[f]==s[i])
                       {
                           d++;
                       }


                   }
                 if(d==3)
                  cout<<"Yes"<<endl;
                  else
                    cout<<"No"<<endl;








            }
        }
        return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值