日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 微軟面試題只有2%的人能回答

微軟面試題只有2%的人能回答

來源:程序員人生   發布時間:2014-08-28 21:48:42 閱讀次數:3980次
最近微軟出了一到題目,據說只有2%的程序員答對了,什么題目呢,我們一起看看吧
題目描述

在微軟云計算服務的機房,有很多機器上跑著一個或者多個的虛擬機。在一段時間里,有很多用戶會來請求建立虛擬機,或者把虛擬機關閉。這個時候,一個最重要的問題,是如何把用戶的請求分配到不同的機器上。這里我們把實際的問題簡化成對CPU的申請。

假定有M臺機器用來服務用戶,我們把機器編號成0到M。每臺機器有多個CPU核,我們把核編號為0到Cm。

當用戶在申請資源的時候,會生成一個請求 “申請<k>個核”,并且每個請求編號為m如果我們在現有的機器中能找到一臺機器能滿足,這臺機器的空余的連續的核能滿足要求的話,就返回<M, C>作為結果。M是機器的下標,C是申請的第一個核的下標。如果沒有找到能滿足請求的機器,<-1,

-1>作為結果。

當用戶釋放資源的時候,生成一個請求”第m個請求的資源釋放”。保證一個請求釋放最多一次。如果請求沒有滿足,忽略釋放的請求。

輸入
第一行是T, 總共的測試的個數
每個測試,第一行給出M 和Q,機器的總數和請求的個數
接下來是M行給出每一臺機器的核數 Ci
接下來Q行給出請求。請求兩種格式,
1.       A k    表示申請k個核
2.       F m   表示釋放第m個請求申請的核
輸出
對于每一個測試,首先輸出
“Case #i:”  i是測試的標號,從1開始。
接下來對于所有申請的請求,輸出m c 或者-1
-1
[限制條件]
1 <= T <= 20
1 <= M <= 100000
1 <= Ci <= 128
1 <= Q <= 1000000
1 <= k <= 128
1 <= m <= M
The number of queries of type 1 is the same
as that of type 2.

正確答案代碼展示

  1. #include <iostream> 
  2. #include <cstdio> 
  3. #include <vector> 
  4. #include <set> 
  5. #include <cstring> 
  6.  
  7. using namespace std; 
  8. const int N = 100005; 
  9. const int M = 130; 
  10. const int inf = 1e9; 
  11.  
  12. struct Query{    //保存每一次詢問的結果,id為機器編號,start為CPU起點,end為CPU終點 
  13.     int id, start, end;     
  14.     Query (){} 
  15.     Query (int a, int b, int c):id(a), start (b), end (c){} 
  16. }; 
  17. bool a[N][M];        //記錄每個機器CPU的使用情況 
  18. int sz[N];            //記錄每個機器CPU數 
  19.  
  20. /* 
  21.  * 返回當前機器中連續num個空閑核的起點 
  22.  */ 
  23. int getStart (bool used[], int size, int num){ 
  24.     int now = 0; 
  25.     for (int i = 1; i <= size; i ++){ 
  26.         if (!used[i]){ 
  27.             now ++; 
  28.             if (now == num){ 
  29.                 return i - now + 1; 
  30.             } 
  31.         }else
  32.             now = 0; 
  33.         } 
  34.     } 
  35.     return -1; 
  36.  
  37. /* 
  38.  * 返回當前機器最大連續空閑核的數量 
  39.  */ 
  40. int getMax (bool used[], int size){ 
  41.     int maxx = 0; 
  42.     int t = 0; 
  43.     for (int i = 1; i <= size; i ++){ 
  44.         if (!used[i]){ 
  45.             t ++; 
  46.             maxx = max (maxx, t); 
  47.         }else
  48.             t = 0; 
  49.         } 
  50.     } 
  51.     return maxx; 
  52.  
  53. int main (){ 
  54.     freopen ("1.txt""r", stdin); 
  55.     freopen ("3.txt""w", stdout); 
  56.     int T, cas = 1; 
  57.     scanf ("%d", &T); 
  58.     while (T --){ 
  59.         memset (a, 0, sizeof (a)); 
  60.         set<int> se[M];        //se[i]存儲的是連續空閑數為i的所有機器編號 
  61.         vector<Query> vec;    //保存歷史詢問 
  62.         printf ("Case #%d:\n", cas ++); 
  63.         int n, m; 
  64.         scanf ("%d%d", &n, &m); 
  65.         for (int i = 1; i <= n; i ++){ 
  66.             scanf ("%d", sz + i); 
  67.             se[sz[i]].insert (i); 
  68.         } 
  69.         while (m --){ 
  70.             char op[5]; 
  71.             int t; 
  72.             scanf ("%s%d", op, &t); 
  73.             if (op[0] == 'A'){ 
  74.                 int id = inf; 
  75.                 for (int i = t; i < M; i ++){ 
  76.                     if (se[i].size ()){ 
  77.                         id = min (id, *se[i].begin ()); 
  78.                     } 
  79.                 } 
  80.                 if (id == inf){ 
  81.                     puts ("-1 -1"); 
  82.                     vec.push_back (Query (-1, -1, -1)); 
  83.                 }else
  84.                     se[ getMax (a[id], sz[id]) ].erase (id); 
  85.                     int start = getStart (a[id], sz[id], t); 
  86.                     printf ("%d %d\n", id, start); 
  87.                     for (int i = start; i <= start + t - 1; i ++){ 
  88.                         a[id][i] = true
  89.                     } 
  90.                     vec.push_back (Query (id, start, start + t - 1)); 
  91.                     se[ getMax (a[id], sz[id])].insert (id); 
  92.                 } 
  93.             }else
  94.                 t --; 
  95.                 if (vec[t].id == -1)    continue
  96.                 int id = vec[t].id; 
  97.                 se[ getMax (a[id], sz[id]) ].erase (id); 
  98.                 for (int i = vec[t].start; i <= vec[t].end; i ++){ 
  99.                     a[id][i] = false
  100.                 } 
  101.                 se[ getMax (a[id], sz[id]) ].insert (id); 
  102.             } 
  103.         } 
  104.     } 

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 五月婷婷网| 日韩国产精品久久久久久亚洲 | 一本色道久久综合亚洲二区三区 | 欧美一区1区三区3区公司 | 激情综合在线观看 | 欧美电影一区二区 | 日日夜夜天天 | 亚洲第一区在线 | 亚洲一区视频 | 国产精品精品视频一区二区三区 | 伊人网址 | 欧美日韩一二三区 | 91亚洲国产 | 欧美成人a | 中文字幕福利视频 | 国产精品一区二区在线观看 | 欧美日韩免费在线观看 | 日韩国产欧美视频 | 久久这里只有 | 成人在线视频看看 | 红桃视频成人免费网站 | 欧洲亚洲一区 | 欧美伦乱| 欧美精品免费在线观看 | 亚洲精彩免费视频 | 欧美字幕一区 | 99精品免费 | 玖玖精品在线 | 久久高清精品 | 久久国产免费看 | 日韩在线不卡视频 | 免费观看毛片 | 精品一区二区三区在线视频 | 中文字幕日韩视频 | av资源网站 | 波多野结衣的一级片 | 日韩av在线不卡 | 麻豆精品 | 国产精品久久二区 | 久久艹精品 | 粉嫩久久99精品久久久久久夜 |