| ||||||||||
| 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 | |||||||||
终于AC了 够蛋疼.. 能做出此题的人 将来都是操作系统内核专家 : )/********************************************************/
/******************** 程序驱动核心 **********************/
/********************************************************/
while(1)
{
/***************** 读取当前时间每个人的行动 ********************/
for(int i=1;i<=nAgentNum_Copy;i++)
{
if(nNextHour[i]==SysHour //判断下次行动时间是否与系统时间一致
&& nNextMin[i]==SysMin
&& nNextSec[i]==SysSec && bAgentExit[i]==false)
{
nCurrentActNum++; //当前行动人数增加1
nCurrentAgentNum[nCurrentActNum]=i; //记录当前行动人的编号
enCurrentAct[nCurrentActNum]=enNextAct[i]; //读取下次行动 存入当前行动
}
}
/****************** 分配当前行动 ************************/
for(int i=1;i<=nCurrentActNum;i++)
{
int ID=nCurrentAgentNum[i]; //读取当前行动人ID
/******************* 分析当前行动 分配下次行动 *******************/
switch(enCurrentAct[i])
{
case StayInElevator:
{
nActNumSum[ID]++; //行动人的行动总数加1
SaveAction(ID,nActNumSum[ID],StayInElevator); //保存行动人当前的行动和时间
if(nCurrentFloor[ID]>nDestinFloor[ID]) //
nNextSec[ID]+=(nCurrentFloor[ID]-nDestinFloor[ID])*30;
else
nNextSec[ID]+=(nDestinFloor[ID]-nCurrentFloor[ID])*30;
nCurrentFloor[ID]=nDestinFloor[ID];
TimeAdjust(nNextHour[ID],nNextMin[ID],nNextSec[ID],nAgentDay[ID]);
if(nRoom[ID][nCurrentVisitNum[ID]+1]==0)//判断下次是继续进房还是没房进了
enNextAct[ID]=Exit;
else
enNextAct[ID]=ElevatorToRoom;
break;
}
case RoomToRoom:
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator