zoukankan      html  css  js  c++  java
  • CCF-权限查询-201612-3

    这道题,开始只有10分.....原因是将false 写成了 flase

    我要吐血而亡....关键是还debug了半天,以为是逻辑错了

    不过亮点是代码很简洁,网上140+的代码看着真复杂

     核心:

           做题之前首先要理好思路,读清楚题意,不要担心在写代码上浪费时间.思路清晰写起来很快的

    首先设计好数据结构,然后设计一个权限类型的输入函数,将三种判别方法发合并,总结出简洁的方式判断

       首先去无权限的默认权限是0;

       查询的时候查询的是最高权限,初始-1

       如果查到了权限小于要求的权限(要求的权限没有也默认为0) 就是no

       否则再判断是否是有等级的无等级查询 是从输出等级还是输出yes

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int N=107;
     4 map <string,int> map1,map2,map3;
     5 struct node {
     6     string na;
     7     bool  flag;
     8     int   lev;
     9 };
    10 node p[N];
    11 vector <node> role[N];
    12 vector <int>  user[N];
    13 int np,nr,nu,q,ans;
    14 node input_p() {
    15     string str; cin>>str;
    16     node tmp={"",0,0}; int i=0;
    17     while (i<str.size()&&str[i]!=':')  tmp.na+=str[i++];
    18     if (str[i]==':')  { 
    19         tmp.lev=str[i+1]-'0';
    20         tmp.flag=1;
    21     }
    22     return tmp;
    23 }
    24 void find_p (int x,string na) {
    25     for (int i=0;i<user[x].size();i++) {
    26         int k=user[x][i];
    27         for (int j=0;j<role[k].size();j++)  {
    28             node nxt=role[k][j];
    29             if (na==nxt.na)  ans=max(ans,nxt.lev);
    30         }
    31     }
    32 } 
    33 int main ()
    34 {
    35     cin>>np;
    36     for (int i=1;i<=np;i++) {
    37         p[i]=input_p();
    38         map1[p[i].na]=i;
    39     }
    40     cin>>nr;
    41     for (int i=1;i<=nr;i++) {  /// role - >  p
    42         string str; cin>>str; map2[str]=i;
    43         int num; cin>>num;
    44         for (int j=1;j<=num;j++) {
    45             node tmp=input_p();
    46             role[i].push_back(tmp);
    47         }
    48     }
    49     cin>>nu;
    50     for (int i=1;i<=nu;i++) {  
    51         string str; cin>>str; map3[str]=i;
    52         int num; cin>>num;
    53         for (int j=1;j<=num;j++) {
    54             string tmp; cin>>tmp;
    55             user[i].push_back(map2[tmp]);
    56         }
    57     }
    58     cin>>q;
    59     while (q--) {
    60         string str;  cin>>str; int x=map3[str];
    61         node tmp=input_p();
    62         ans=-1;  string na=tmp.na; int id=map1[na]; 
    63         find_p(x,na);
    64         if (!tmp.flag&&p[id].flag) {
    65             if (ans<0) cout<<"false
    "; 
    66             else       cout<<ans<<"
    ";
    67         } 
    68         else {
    69             if (ans<tmp.lev) cout<<"false
    ";
    70             else             cout<<"true
    ";
    71         } 
    72     }
    73     return 0;
    74 }
    抓住青春的尾巴。。。
  • 相关阅读:
    jquery获取input的checked属性
    归并排序法
    Pascal's Triangle II —LeetCode
    01背包之求第K优解——Bone Collector II
    Intellij IDEA 14隐藏被排除的文件夹
    LeetCode——Majority Element
    多线程爬虫Java调用wget下载文件,独立线程读取输出缓冲区
    LeetCode——Restore IP Addresses
    LeetCode——Pascal's Triangle
    LeetCode——Permutations
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/10493491.html
Copyright © 2011-2022 走看看