1. 程式人生 > >Disastrous Downtime(一段)

Disastrous Downtime(一段)

題意:有 n 條指令,在同一時間內,一臺機器只能同時執行 k 條指令,而且 每條指令需要執行 1000ms=1s 的時間才能執行完畢,            問總共最少需要多少臺機器才能使每條指令都執行完。

題解:是用兩個指標ij,i小j大,對於每個i來說找最小的j使得data[j]-data[i]>1000,則j-i為這一秒內需要處理的請求數,求出其中的最大值。一個機器能處理k個,算出需要多少個機器就行了。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
#define maxn 100005
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
int n,k;
int a[maxn];
int main()
{
   while(cin>>n>>k)
   {
      for(int i=0;i<n;i++)
      {
         cin>>a[i];
      }
      sort(a,a+n);
      int i,j;
      int ans=0;
      for(i=0,j=0;i<n&&j<n;)
      {
         while(((a[j]-a[i])<1000)&&j<n)
            j++;
         if(j==n)
            break;
         ans=max(ans,j-i);
         i++;
      }
      ans=max(ans,j-i);
      if(ans%k)
      {
         ans=ans/k+1;
      }
      else
         ans=ans/k;
      cout << ans << endl;
   }
   return 0;
}