日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

CSP认证201612-3权限查询[C++题解]:模拟题、结构体、set、有点复杂

發(fā)布時間:2025/4/5 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CSP认证201612-3权限查询[C++题解]:模拟题、结构体、set、有点复杂 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目分析




來源:acwing

分析:這樣的模擬題,主要難在建模,需要思考用什么來存儲。

  • 這里用一個結構體來存權限。用哈希表來存<角色,權限結構體>的映射,當然權限結構體存在set中,需要去重(因為題目說明可能存在重復的讀入,只不過等級不同)。
  • 這里用好結構體內部的構造函數(shù),用字符串來初始化是有等級權限還是無等級權限。
  • ac代碼

    #include<bits/stdc++.h> using namespace std;// 權限結構體 struct P{string name;mutable int level; //level == -1,表示無等級權限// 構造函數(shù)P(string str){int k = str.find(':');// 無等級if(k == -1) name = str, level = -1;// 有等級else{name = str.substr(0, k);level = stoi(str.substr(k+1));}}bool operator<(const P& t)const{return name < t.name;} }; //哈希表:角色 -》權限結構體 // 讀入角色時,權限可能重復讀入,用set去重,保留最高權限 unordered_map<string, set<P>> role, person;int main(){int n;string str;// 讀入權限cin >> n;while(n --) cin >> str; // 沒用,讀掉//讀入角色cin >> n;while(n --){string name;int cnt;cin >> name >> cnt;auto& r = role[name];while(cnt --){cin >> str;P t(str); // 用str來初始化結構體t// 無權限if(t.level == -1) r.insert(t);//插入到set中// 有權限else{if(!r.count(t)) r.insert(t);//插入到set中else{// 在set中找到結構體t,返回迭代器auto it = r.find(t); //更新最大權限it->level = max(it->level, t.level);}}}}// 讀入usercin >> n;while(n --){string name;int cnt;cin >> name >> cnt;auto& p = person[name]; // 將角色權限賦給用戶pwhile(cnt --){string str;cin >> str;for(auto& t :role[str]){// 讀取每種權限if(t.level == -1) p.insert(t); //無等級else{//有等級if(!p.count(t)) p.insert(t);else{auto it = p.find(t);it -> level = max(it->level, t.level);}}}}}//讀入詢問cin >> n;while(n --){string user, pr;cin >> user >> pr;P t(pr);// 用權限初始化結構體tauto& p = person[user];// 沒有權限if(!p.count(t)) puts("false");else{// 有權限auto it = p.find(t);if(t.level != -1){ //無等級if(it->level >= t.level) puts("true");else puts("false");}else{ // 有等級if(it->level == -1) puts("true");else cout << it->level << endl;}}} }

    題目鏈接

    https://www.acwing.com/problem/content/3242/

    總結

    以上是生活随笔為你收集整理的CSP认证201612-3权限查询[C++题解]:模拟题、结构体、set、有点复杂的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。