转载

[转载] $CF725B$ 题解

阅读原文

观察题目条件,容易发现乘务员的服务以四排为一个循环,如 \(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; }

转载于:https://www.cnblogs.com/Peter0701/p/11288503.html

正文到此结束
本文目录