CCF-權限查詢-201612-3
阿新 • • 發佈:2019-03-08
權限 沒有 擔心 amp ole space code 查詢 using
這道題,開始只有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 (intx,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\n"; 66 else cout<<ans<<"\n"; 67 } 68 else { 69 if (ans<tmp.lev) cout<<"false\n"; 70 else cout<<"true\n"; 71 } 72 } 73 return 0; 74 }
CCF-權限查詢-201612-3