| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
不知道哪里错了啊,有过了的人帮忙看看么#include <iostream>
#include <deque>
#include <cstring>
#include <algorithm>
using namespace std;
deque<int> desks[20];
deque<int>::iterator pos;
int s[101][2];
int requests[101][51];
int request[10000];
int main()
{
int m,c,n;
cin>>m>>c>>n;
while(m!=0)
{
memset(s,0,sizeof(s));
for(int i=0;i<10;i++)
desks[i].clear();
int sum=0;
for(int i=0;i<n;i++)
{
cin>>s[i][0];
sum+=s[i][0];
for(int j=0;j<s[i][0];j++)
cin>>requests[i][j];
}
int index=0;
while(index<sum)
for(int i=0;i<n;i++)
{
if(s[i][1]<s[i][0] )
request[index++]=requests[i][s[i][1]++];
}
int SUM=0;
for(int i=0;i<sum;i++)
{
int j=0;
//在书桌上面找书,找不到就在书架上面拿
for(j=0;j<m;j++)
if((pos=find(desks[j].begin(),desks[j].end(),request[i]))!=desks[j].end())
{
SUM+=j+1;
desks[j].erase(pos);
break;
}
if(j==m)
SUM+=m+1;
//放书
//如果D1是未满的,就放在D1
if(desks[0].size()<c)
{
desks[0].push_back(request[i]);
SUM++;
}
else
{
//如果D1是满的,就先把书放到最近的非空桌子
int index=-1;
for(j=0;j<m;j++)
if(desks[j].size()<c)
{
desks[j].push_back(request[i]);
SUM+=j+1;
index=j;
break;
}
if(j==m)
{
SUM+=m+1;
index=m;
}
//拿起D1上面的最旧的书
int old_book= desks[0].front();
desks[0].pop_front();
SUM++;
//把最旧的书放在最近的非空桌子上面
for(j=1;j<m;j++)
if(desks[j].size()<c)
{
desks[j].push_back(old_book);
SUM+=j+1;
break;
}
if(j==m)
{
SUM+=m+1;
}
//从临时位置上面把书拿回来
if(index!=m)
{
desks[index].pop_back();
SUM+=index+1;
}
else
SUM+=m+1;
//重新放到新位置上面
SUM++;
desks[0].push_back(request[i]);
}
}
cin>>m>>c>>n;
cout<<SUM<<endl<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator