题意很简单,有一个高速缓存,系统每处理每个请求,如果某个块在使用之后超过10分钟再也没访问过,则清理出catch
可以在堆里丢入空闲的catch页,然后依次处理请求,每次处理前检查已分配的块,如果空闲时间大于10*60秒,则将该块释放(放入空闲堆中)
贴代码
 1 # include <cstdio>
# include <cstdio>
 2 # include <cstring>
# include <cstring>
 3 # include <queue>
# include <queue>
 4 # include <cstdlib>
# include <cstdlib>
 5 # include <vector>
# include <vector>
 6 using namespace std;
using namespace std;
 7 priority_queue<int,vector<int>,greater<int> > refer;
priority_queue<int,vector<int>,greater<int> > refer;
 8 struct node
struct node
 9

 {
{
10 int t,num;
    int t,num;
11 char op;
    char op;
12 };
};
13 vector<node> data;
vector<node> data;
14 int main()
int main()
15

 {
{
16 char str[100];
    char str[100];
17 for(int i=1;i<=30000;i++)
    for(int i=1;i<=30000;i++)
18 refer.push(i);
       refer.push(i);
19 int c[30001];
    int c[30001];
20 memset(c,0,sizeof(c));
    memset(c,0,sizeof(c));
21 while(gets(str))
    while(gets(str))
22
 
     {
{
23 node tmp;
       node tmp;
24 tmp.t=atoi(strtok(str," "));
       tmp.t=atoi(strtok(str," "));
25 tmp.op=*strtok(NULL," ");
       tmp.op=*strtok(NULL," ");
26 if(tmp.op=='.')
       if(tmp.op=='.')
27 tmp.num=atoi(strtok(NULL," "));
          tmp.num=atoi(strtok(NULL," "));
28 data.push_back(tmp);
       data.push_back(tmp);
29 }
    }
30 int now=0,last=0;
    int now=0,last=0;
31 for(now=0;now<data.size();now++)
    for(now=0;now<data.size();now++)
32
 
     {
{
33 while(data[now].t-data[last].t>=600)
       while(data[now].t-data[last].t>=600)
34
 
        {
{
35 if(c[data[last].num]&&data[now].t-c[data[last].num]>=600)
            if(c[data[last].num]&&data[now].t-c[data[last].num]>=600)
36
 
             {
{
37 refer.push(data[last].num);
                refer.push(data[last].num);
38 c[data[last].num]=0;
                c[data[last].num]=0;
39 }
            }
40 last++;
            last++;
41 }
       }
42 switch(data[now].op)
       switch(data[now].op)
43
 
        {
{
44 case '+':
           case '+':
45 c[refer.top()]=data[now].t;
              c[refer.top()]=data[now].t;
46 printf("%d\n",refer.top());
              printf("%d\n",refer.top());
47 data[now].num=refer.top();
              data[now].num=refer.top();
48 refer.pop();
              refer.pop();
49 break;
              break;
50 case '.':
           case '.':
51 if(c[data[now].num])
              if(c[data[now].num])
52
 
               {
{
53 printf("+\n");
                 printf("+\n");
54 c[data[now].num]=data[now].t;
                 c[data[now].num]=data[now].t;
55 }
              }
56 else
              else
57 printf("-\n");
                 printf("-\n");
58 break;
              break;
59 };
       };
60 
           
61 }
    }
62 //system("pause");
    //system("pause");
63 return 0;
    return 0;
64 }
}
65
66