Canada Cup 2016 B. Food on the Plane (数学)

来源:互联网 发布:淘宝卖的电工证真的吗 编辑:程序博客网 时间:2024/06/06 19:40

大体题意:

给你行号和列号,其中列号为a~f ,有两个服务员同时从1 行和3行出发,求到达你的位置 最少的时间!(还有很多细节,仔细读读不难理解!)

思路:

一个比较水的数学题:

因为一个服务的话,他们能服务四行!因此你要先算出你的行号包括了几个四行!

然后在通过取模算出你是被第几个服务员服务的,分类讨论计算一下即可!

注意  服务同一行的顺序 是  f  e  d  a b c

详细见代码:

#include <bits/stdc++.h>using namespace std;const int maxn = 100 + 7;typedef long long ll;char s[maxn];int rev(char c){    if (c == 'f') return 1;    if (c == 'e') return 2;    if (c == 'd') return 3;    if (c == 'a') return 4;    if (c == 'b') return 5;    if (c == 'c') return 6;}int main(){    ll v = 0;    scanf("%s",s);    char la;    for (int i = 0; s[i]; ++i){        if (s[i+1] != 0) v = v * 10 + s[i]- 48;        else la = s[i];    }    v--;    ll k = v/4;    ll md = v % 4,sum;    if (!md || md == 1){        sum = 16ll*k-1;        if (!md){            sum += rev(la) + 1;        }        else {            sum += 8 + rev(la);;        }    }    else {        sum = 16ll*k-3;        sum += 3;        if (md == 2) sum += rev(la);        else {            sum += 7;            sum += rev(la);        }    }    printf("%lld\n",sum);    return 0;}

B. Food on the Plane
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

A new airplane SuperPuperJet has an infinite number of rows, numbered with positive integers starting with1 from cockpit to tail. There are six seats in each row, denoted with letters from 'a' to 'f'. Seats 'a', 'b' and 'c' are located to the left of an aisle (if one looks in the direction of the cockpit), while seats 'd', 'e' and 'f' are located to the right. Seats 'a' and 'f' are located near the windows, while seats 'c' and 'd' are located near the aisle.

 

It's lunch time and two flight attendants have just started to serve food. They move from the first rows to the tail, always maintaining a distance of two rows from each other because of the food trolley. Thus, at the beginning the first attendant serves row 1 while the second attendant serves row 3. When both rows are done they move one row forward: the first attendant serves row2 while the second attendant serves row 4. Then they move three rows forward and the first attendant serves row 5 while the second attendant serves row 7. Then they move one row forward again and so on.

Flight attendants work with the same speed: it takes exactly 1 second to serve one passenger and 1 second to move one row forward. Each attendant first serves the passengers on the seats to the right of the aisle and then serves passengers on the seats to the left of the aisle (if one looks in the direction of the cockpit). Moreover, they always serve passengers in order from the window to the aisle. Thus, the first passenger to receive food in each row is located in seat 'f', and the last one — in seat 'c'. Assume that all seats are occupied.

Vasya has seat s in row n and wants to know how many seconds will pass before he gets his lunch.

Input

The only line of input contains a description of Vasya's seat in the format ns, where n (1 ≤ n ≤ 1018) is the index of the row ands is the seat in this row, denoted as letter from 'a' to 'f'. The index of the row and the seatare not separated by a space.

Output

Print one integer — the number of seconds Vasya has to wait until he gets his lunch.

Examples
Input
1f
Output
1
Input
2d
Output
10
Input
4a
Output
11
Input
5e
Output
18
Note

In the first sample, the first flight attendant serves Vasya first, so Vasya gets his lunch after1 second.

In the second sample, the flight attendants will spend 6 seconds to serve everyone in the rows 1 and3, then they will move one row forward in 1 second. As they first serve seats located to the right of the aisle in order from window to aisle, Vasya has to wait3 more seconds. The total is 6 + 1 + 3 = 10.



0 0
原创粉丝点击