小模拟一道,抢车位,一辆车离开后,离该车位最近的车进入,假设该车移动了N格,其他所有等待的车也移动N格,计算距离时注意方向是逆时针的
#include<cstdio>
#include<vector>
using namespace std;
namespace
{
struct Car
{
int srcp, curp, dstp;
};
}
int main()
{
vector<Car*> V;
int p;
while (scanf("%d", &p), p != 99)
{
Car *car = new Car();
car->srcp = car->curp = p;
car->dstp = 0;
V.push_back(car);
}
while (scanf("%d", &p) != EOF)
{
int d, min = 100;
Car *near = NULL;
for (size_t i = 0; i < V.size(); i++)
if (!(V[i]->dstp))
{
if (V[i]->curp <= p)
d = p - V[i]->curp;
else
d = p + 20 - V[i]->curp;
if (d < min)
{
min = d;
near = V[i];
}
}
if (near != NULL)
{
near->dstp = p;
for (size_t i = 0; i < V.size(); i++)
if (!(V[i]->dstp))
{
V[i]->curp += min;
if (V[i]->curp > 20)
V[i]->curp -= 20;
}
}
}
for (size_t i = 0; i < V.size(); i++)
{
if (V[i]->dstp)
printf("Original position %d parked in %d\n", V[i]->srcp,
V[i]->dstp);
else
printf("Original position %d did not park\n", V[i]->srcp);
delete V[i];
}
return 0;
}