[USACO 2021.02 Feb]Problem 1. Year of the Cow

简介: [USACO 2021.02 Feb]Problem 1. Year of the Cow

Farmer John 的奶牛们得知最近正在庆祝牛年的到来时十分兴奋。牛年总是奶牛们的最爱。

我们知道,中国历法中每一年所对应的生肖遵循 12 年的周期:Ox, Tiger, Rabbit, Dragon, Snake, Horse, Goat, Monkey, Rooster, Dog, Pig, Rat(牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪、鼠),然后回到牛。

奶牛 Bessie 自豪地说她是在许多年前的一个牛年出生的。她的朋友 Elsie 想要知道她与 Bessie 出生相差多少年,并且希望你能够通过查看农场上若干奶牛出生年份之间的关系来帮助她推算。

输入格式(从终端 / 标准输入读入):

输入的第一行包含一个整数 N(1<=N<=100)。以下 N 行每行包含一个 8 个单词的短语,指定了两头奶牛的出生年份之间的关系,格式为

"Mildred born in previous Dragon year from Bessie"(Mildred 在 Bessie 出生的前一个龙年出生),

"Mildred born in next Dragon year from Bessie"(Mildred 在 Bessie 出生的后一个龙年出生)。

最后一个单词是农场上某一头奶牛的名字,为 "Bessie" 或一头已经在之前的输入中出现过的奶牛。

第一个单词是农场上某一头奶牛的名字,不为 "Bessie" 且未在之前的输入中出现过。所有的奶牛名字不超过 10 个字符,且仅包含字符 a..z 或 A..Z。

第 5 个单词是上述十二生肖之一。

第 4 个单词是 "previous"(之前)或 "next"(之后)之一。例如,如果短语为 "Mildred born in previous Dragon year from Bessie",则 Mildred 的出生年份为最为接近且严格处于 Bessie 的出生年份之前(不等于)的龙年。

输出格式(输出至终端 / 标准输出):

输出 Bessie 和 Elsie 的出生年份之间相差的年数。输入保证可以通过给定的信息求出结果。

输入样例:

4

Mildred born in previous Dragon year from Bessie

Gretta born in previous Monkey year from Mildred

Elsie born in next Ox year from Gretta

Paulina born in next Dog year from Bessie

输出样例:

12

在以上的输入中,

Elsie 在 Bessie 之前 12 年出生。

Mildred 在 Bessie 之前 9 年出生。

Gretta 在 Bessie 之前 17 年出生。

Paulina 在 Bessie 之前 9 年出生。

供题:Brian Dean

1. #include <iostream>
2. #include <cstdio>
3. #include <string>
4. #include <map>
5. using namespace std;
6. map<string,int>Years={{"Ox",0},{"Tiger",1},{"Rabbit",2},{"Dragon",3},
7.            {"Snake",4}, {"Horse",5},{"Goat",6},{"Monkey",7},
8.            {"Rooster",8},{"Dog",9},{"Pig",10},{"Rat",11}};//<属相,编号>
9. map<string,int> mp;//<名字,年份>
10. map<string,string> r;//<名字,属相>
11. int n;
12. string name1,s1,s2,dir,year,s3,s4,name2;
13. int main()
14. {
15.   scanf("%d",&n);
16.   mp["Bessie"]=2000;//假定一个中间年份作为Bessie的年龄
17.   r["Bessie"]="Ox";//Bessie的属相
18.   for(int i=1;i<=n;i++){
19.     cin>>name1>>s1>>s2>>dir>>year>>s3>>s4>>name2;
20.     r[name1]=year;
21.     if(dir=="previous"){//向前推
22.       int bt=Years[r[name2]]-Years[year];
23.       if(bt<=0) bt+=12;
24.       mp[name1]=mp[name2]-bt;
25.     }
26.     else{//向后推
27.       int bt=Years[year]-Years[r[name2]];
28.       if(bt<=0) bt+=12;
29.       mp[name1]=mp[name2]+bt;
30.     }
31.   }
32.   cout<<abs(mp["Bessie"]-mp["Elsie"])<<endl;
33.   return 0;
34. }

下载测试数据

相关文章
|
应用服务中间件 C++ AHAS
hdu1327 Definite Values
hdu1327 Definite Values
54 0
[USACO 2021.02 Feb]Problem 3. Clockwise Fence
[USACO 2021.02 Feb]Problem 3. Clockwise Fence
2021 ICPC Asia Regionals Online Contest (II) Problem G. Limit
2021 ICPC Asia Regionals Online Contest (II) Problem G. Limit
[USACO 2021.02 Feb]Problem 2. Comfortable Cows
[USACO 2021.02 Feb]Problem 2. Comfortable Cows
luogu CF776D The Door Problem(2-sat问题)
luogu CF776D The Door Problem(2-sat问题)
67 0
|
测试技术
HDU-1847,Good Luck in CET-4 Everybody!(巴什博弈)
HDU-1847,Good Luck in CET-4 Everybody!(巴什博弈)
|
消息中间件 数据建模
题解 P1339 【[USACO09OCT]热浪Heat Wave】
题目链接 这道题纯属是一个裸的SPFA;建议先把模板AC之后再做。只需要做一些手脚,就是在加边的时候加一个双向边就好。然后再第一次加点的时候看不懂模板的出门左转度娘。推荐下面一片讲解:友链所以说,直接上代码。
1147 0