忙碌的售票员【算法赛】

admin 2025-07-22 09:31:49

小蓝是一家旅行社的售票员,他每天都很忙碌。

为什么呢?原因是这样的,当地文旅局与旅行社合作,所以旅行社能够以更加低廉的价格拿到票,然后旅行社再将这些票配套导游服务一起卖给顾客。虽然看起来十分划算,但是这可苦了我们的售票员小蓝。因为即使能够拿到更低价的票,但是票仍然需要从机器中打印出,文旅局的机器十分的老旧,但是旅行社的订单又十分的多,这就导致了小蓝需要耗费大量的时间来打印票据。

题解:

#include

#include

int main(int argc, char *argv[])

{

int t;

scanf("%d",&t);

while(t--)

{

long long x,y,a;

scanf("%lld%lld%lld",&x,&y,&a);

long long sum=0;

long long m=a/3;

long long n=a%3;

if(a%3==0)

{

n=3;

m--;

}

if(a!=0) // 添加条件判断,避免剩余票数为0时多进行一次循环

{

if(y>2*x) sum+=(x*3+(y-2*x))*m;

else sum+=x*3*m;

sum+=n*x;

}

printf("%lld\n",sum);

}

return 0;

}

代码解读:

程序首先读取测试数据的数量 t。然后进入一个循环,循环 t 次,每次处理一个测试数据。在每次循环中,程序会读取三个整数 x、y、a,分别表示打印一张票的时间、冷却时间和总票数。接下来,程序会计算两个变量 m 和 n,分别表示打印机器的完整周期数和剩余票数。如果剩余票数 a 能被 3 整除,则将 n 设置为 3,并将 m 减 1。这样做是为了确保每个周期都是完整的。接着程序根据给定的条件计算总时间 sum:

如果冷却时间大于两倍的打印时间,那么每个周期中的冷却时间将超过打印时间,因此在每个完整的周期中,我们可以用 (x * 3 + (y - 2 * x)) * m 来计算打印时间。否则,我们只需将每个完整的周期中的打印时间累加到总时间中即可,即 x * 3 * m。最后,我们再加上剩余票数的打印时间 n * x。最后,程序输出总时间 sum。循环结束后,程序结束执行。