• [转载] $CF725B$ 题解


    阅读原文

    观察题目条件,容易发现乘务员的服务以四排为一个循环,如 (1+3 ightarrow 2+4 ightarrow 5+7 ightarrow 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 ightarrow e ightarrow d ightarrow a ightarrow b ightarrow 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
    ",wt);
        return 0;
    }
    
  • 相关阅读:
    nginx配置https访问
    nginx解决带_的head内容丢失
    软件开发报价的计算方法(转载)
    使用游标批量初始化密码
    调用WScript.Shell时产生Automation 服务器不能创建对象的错误
    用.NET SqlBulkCopy类执行批量插入数据到数据库
    XML文件做数据源的读取使用
    页面实现数据库备份(还原)实例
    特定的ExcelCSS样式Excel导出
    索引的初步学习总结
  • 原文地址:https://www.cnblogs.com/Peter0701/p/11288503.html
Copyright © 2020-2023  润新知