CF725B 题解
Peter0701
2019-07-20 09:14:22
观察题目条件,容易发现乘务员的服务以四排为一个循环,如 $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$ 秒。
那么这题就完美结束了,如有疑问,评论区见!
代码如下:
```cpp
#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;
}
```