观察题目条件,容易发现乘务员的服务以四排为一个循环,如 \(1+3 \rightarrow 2+4 \rightarrow 5+7 \rightarrow 6+8\) 就是两个循环。在每个循环中,乘务员只移动一次。在每个循环中,乘务员共移动两次次。具体来说,从每个循环中 \(mod\) \(4\) \(==\) \(1\) 的一排前进到 \(mod\) \(4\) \(==\) \(2\) 的一排需要花费 \(1\) 秒,而从每个循环中 \(mod\) \(4\) \(==\) \(2\) 的一排前进到下一个循环 \(mod\) \(4\) \(==\) \(1\) 的一排时需要花费 \(3\) 秒。
那么这题就可以通过分类讨论的方式解决,可以按照排数 \(n\) 分为以下四类:
情况一: \(n\) \(mod\) \(4\) \(==\) \(1\) 时,已经经过了 \((n-1)/4\) 个循环,每个循环开始到下一个循环之前共用了 \(4×6/2+1+3=16\) 秒,故在第 \(n\) 排服务之前总计用了 \((n-1)/4×16=n×4-4\) 秒钟,再对第 \(n\) 排每个座位加上相应的服务时间即可。
情况二: \(n\) \(mod\) \(4\) \(==\) \(2\) 时,已经经过了 \((n-2)/4\) 个循环,每个循环开始到下一个循环之前共用了 \(4×6/2+1+3=16\) 秒,又因为在第 \(n-1\) 排服务时花费了 \(6×1=6\) 秒,从第 \(n-1\) 排走到第 \(n\) 排花费了 \(1\) 秒,故在第 \(n\) 排服务之前总计用了 \((n-2)/4×16+6+1=n×4-1\) 秒钟,再对第 \(n\) 排每个座位加上相应的服务时间即可。
情况三: \(n\) \(mod\) \(4\) \(==\) \(3\) 时,已经经过了 \((n-3)/4\) 个循环,每个循环开始到下一个循环之前共用了 \(4×6/2+1+3=16\) 秒,故在第 \(n\) 排服务之前总计用了 \((n-3)/4×16=n×4-12\) 秒钟,再对第 \(n\) 排每个座位加上相应的服务时间即可。
情况四: \(n\) \(mod\) \(4\) \(==\) \(0\) 时,已经经过了 \((n-4)/4\) 个循环,每个循环开始到下一个循环之前共用了 \(4×6/2+1+3=16\) 秒,又因为在第 \(n-1\) 排服务时花费了 \(6×1=6\) 秒,从第 \(n-1\) 排走到第 \(n\) 排花费了 \(1\) 秒,故在第 \(n\) 排服务之前总计用了 \((n-4)/4×16+6+1=n×4-9\) 秒钟,再对第 \(n\) 排每个座位加上相应的服务时间即可。
再具体说明一下对第 \(n\) 排每个座位加上相应的服务时间的方法:根据题意和题图,服务总是由窗口方向向过道方向进行,又因为题目规定先进行(面向前排方向)右边座位的服务,因此对于每一排来说,服务总是以 \(f \rightarrow e \rightarrow d \rightarrow a \rightarrow b \rightarrow c\) 的顺序进行的。因此读入座位号的字母为 \(f\) 时,总服务时间要加上 \(1\) 秒,读入座位号的字母为 \(e\) 时,总服务时间要加上 \(2\) 秒,读入座位号的字母为 \(d\) 时,总服务时间要加上 \(3\) 秒,读入座位号的字母为 \(a\) 时,总服务时间要加上 \(4\) 秒,读入座位号的字母为 \(b\) 时,总服务时间要加上 \(5\) 秒,读入座位号的字母为 \(c\) 时,总服务时间要加上 \(6\) 秒。
那么这题就完美结束了,如有疑问,评论区见!
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,wt;
char s;
int main()
{
scanf("%lld",&n);
scanf("%c",&s);
if(n%4==1)
{
wt=n*4-4;
if(s=='f')
wt++;
else if(s=='e')
wt+=2;
else if(s=='d')
wt+=3;
else if(s=='a')
wt+=4;
else if(s=='b')
wt+=5;
else if(s=='c')
wt+=6;
}
else if(n%4==2)
{
wt=n*4-1;
if(s=='f')
wt++;
else if(s=='e')
wt+=2;
else if(s=='d')
wt+=3;
else if(s=='a')
wt+=4;
else if(s=='b')
wt+=5;
else if(s=='c')
wt+=6;
}
else if(n%4==3)
{
wt=n*4-12;
if(s=='f')
wt++;
else if(s=='e')
wt+=2;
else if(s=='d')
wt+=3;
else if(s=='a')
wt+=4;
else if(s=='b')
wt+=5;
else if(s=='c')
wt+=6;
}
else
{
wt=n*4-9;
if(s=='f')
wt++;
else if(s=='e')
wt+=2;
else if(s=='d')
wt+=3;
else if(s=='a')
wt+=4;
else if(s=='b')
wt+=5;
else if(s=='c')
wt+=6;
}
printf("%lld\n",wt);
return 0;
}