ipv4地址白名單

  • 2019 年 11 月 7 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/102081390

題目描述:

我們的小齊同學是一名很辛苦的實習DBA,他每天的工作就是為一個帳號添加授權,今天給這200個ipv4添加授權,明天又要把這200個授權刪掉,有一天小齊同學在刪除授權的時候不小心把所有的授權都刪了,被領導很批了一頓。痛定思痛,小齊同學開始反思他每天的工作,發現無非就是我每天要讓那些ip訪問資料庫而已,他決定寫一個效率很高的ip白名單,請幫小齊同學說一下實現思路,並用結構化程式語言(c/c++/python/golang/java等)寫一個ip白名單吧,他需要這個白名單有添加ip的功能,刪除ip的功能,查找這個ip在不在白名單中,以及列印白名單中的內容,以上四個功能中查找ip是否在白名單中效率一定要高。並幫小齊分析一下各個功能的時間複雜度,寫的好小齊同學會請你吃飯哦。

輸入描述:

每行一條輸入,格式為 type:ip

type 包括 i d s 分別表示添加,刪除,查找

以 end 結尾 輸入最多不超過100000行

輸出描述:

輸出每行一條對應輸入

如果是查找,成功請列印true,失敗請列印false

如果是添加刪除,請列印ok

輸入描述1:

i:127.0.0.1 i:10.0.0.1 s:10.0.0.1 d:10.0.0.1 s:10.0.0.1 s:127.0.0.1 end

輸出描述1:

ok ok true ok false true

輸入描述2:

i:127.0.0.3 i:127.0.0.3 d:127.0.0.4 s:127.0.0.3 i:127.0.0.5 d:127.0.0.5 s:127.0.0.4 i:127.0.0.4 s:127.0.0.3 d:127.0.0.4 end

輸出描述2:

ok ok ok true ok ok false ok true ok

解題思路:

我感覺這題有bug吧,我是用set來模擬ip白名單的,當set中沒有那個需要刪除的ip時它居然還要你輸出ok?!

AC程式碼:

#include <bits/stdc++.h>  using namespace std;  #define Up(i,a,b) for(int i = a; i <= b; i++)    int main()  {      ios::sync_with_stdio(false);      set<string> s;   //用來存ip白名單      string str;      while(getline(cin,str) && str!="end")      {          char type = str[0];    //添加i、刪除d、查找s          string ip = str.substr(2,str.length()-2);          //cout << ip << endl;          if(type=='i')          {              s.insert(ip);              printf("okn");          }          if(type=='s')   //查找          {              printf("%sn",s.count(ip)!=0?"true":"false");          }          if(type=='d')   //刪除          {              if(s.count(ip)!=0)   //這題有bug吧 set中沒有這個ip還要你輸出ok?!              {                  s.erase(s.find(ip));   //不加if條件可鞥會產生段錯誤,因為它輸入的ip可能不存在set中              }              printf("okn");          }      }      return 0;  }
Exit mobile version