zoukankan      html  css  js  c++  java
  • foj 文件系统 stl string + vector 多对多的数据结构

    题目来源:http://acm.fzu.edu.cn/contest/problem.php?cid=135&sortid=1

     Problem A 文件系统

    Accept: 56    Submit: 130
    Time Limit: 1000 mSec    Memory Limit : 32768 KB

     Problem Description

    每个Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和无权限(-)。

    利用ls -l命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为准。第一个字段由10个字符组成,如下:

    -rwxr-xr-x

    第1位表示文件类型,-表示文件,d表示目录

    2-4位表示文件所有者的权限,u权限

    5-7位表示文件所属组的成员的权限,g权限

    8-10位表示所有者和所属组的成员之外的用户的权限,o权限

    2-10位的权限总和有时称为a权限

    以上例子中,表示这是一个文件(非目录),文件所有者具有读、写和执行的权限,所属组的用户和其他用户具有读和执行的权限而没有写的权限。

    用数字表示法修改权限

    所谓数字表示法,是指将r、w和x分别用4、2、1来代表,没有授予权限的则为0,

    然后把权限相加,如下

    原始权限 转换为数字 数字表示法

    rwxrwxr-x (421)(421)(401) 775

    rwxr-xr-x (421)(401)(401) 755

    判断用户对一个文件的权限是这样的:

    1、如果用户是文件所有者,则只按"u权限"判定,不考虑以下条件

    2、如果用户在文件所属组的用户列表里,则只按"g权限"判定,不考虑以下条件

    3、如果不满足以上两点,这只按"o权限"判定

    现在给出当前系统中的所有用户以及用户所属的组。并且给出一些文件的信息。

    请帮kk解决每个用户对每个文件的权限,用数字表示显示。

     Input

    第一行一个T,表示有T组数据

    对于每组数据

    第一行一个n表示有n个用户。接着n行,每行格式为

    username n1 groupname_1 groupname_2 ... groupname_n1

    表示用户username属于n1个组,接着为每个组名

    接着输入一个m,表示有m个文件。接着给出每个文件的信息,格式为

    filename xxx user group

    表示文件名、权限、所属用户和所属组

    0<n,m<=100,组名种数也小于100,所有字符串长度小于10.

     Output

    对于每组数据

    输出一个n*m的矩阵,表示每个用户对每个文件的权限。数字间用空格隔开。

     Sample Input

    2 2 AA 2 AA BB BB 1 BB 3 a 755 AA AA b 644 BB BB c 640 BB CC 1 AA 2 AA BB 1 a 755 CC AA

     Sample Output

    7 4 0 5 6 6 5

     分析:

    vector<string>List[N]

    1:每个向量存储一个用户信息list[n][0] 以及 它所在的组的信息。 这样就实现了 多对多的关系。

    2:stl 中 标准库类型string 对象中有许多操作。 这里我们用到了 s1=s2 ,直接判断两个字符串是否相等。

    代码如下:

    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <vector>
    using namespace std;
    typedef long long ll;
    #define N 105
    vector<string>List[N];
    int n,m;
    struct Node
    {
        string name;
        string num;
        string user;
        string group;
        void read()
        {
            cin>>name>>num>>user>>group;
        }
    };
    Node node[N];
    int ans[N][N];
    int main() {
        string s;
        int t,c;
        cin>>t;
       while(t--)
       {
           cin>>n;
           for(int i=1;i<=n;i++)
                List[i].clear();
           for(int i=1;i<=n;i++)
           {
               cin>>s;
               List[i].push_back(s);
               cin>>c;
               while(c--)
               {
                   cin>>s;
                   List[i].push_back(s);
               }
           }
           cin>>m;
           for(int i=1;i<=m;i++)
           {
               node[i].read();
           }
           memset(ans,-1,sizeof(ans));
           for(int i=1;i<=n;i++)
           {
               for(int j=1;j<=m;j++)
               {
                   if(node[j].user == List[i][0])
                   {
                       ans[i][j]=node[j].num[0]-'0';
                       continue;
                   }
                   else
                   {
                       for(int k=1;k<List[i].size(); k++)
                       {
                           if(List[i][k]==node[j].group)
                           {
                               ans[i][j]= node[j].num[1]-'0';
                               break;
                           }
                       }
                       if(ans[i][j]==-1)
                        ans[i][j]=node[j].num[2]-'0';
                   }
               }
           }
           for(int i=1;i<=n;i++)
           {
                for(int j=1;j<=m;j++)
                {
                    if(j==1) printf("%d",ans[i][j]);
                    else printf(" %d",ans[i][j]);
                }
            printf("
    ");
           }
       }
        return 0;
    }
  • 相关阅读:
    Python-流程控制之if判断
    Python-流程控制之循环
    Python-基本运算符
    Python-基本运算符
    Python-数据类型的基本使用
    python2中与用户交互
    Python-内存管理
    vue 替换表格中的数据
    实现单例的三个方法
    django----框架介绍
  • 原文地址:https://www.cnblogs.com/zn505119020/p/3619198.html
Copyright © 2011-2022 走看看