侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

Acwing 春季每日一题 3370.牛年

Hope
2022-03-19 / 0 评论 / 0 点赞 / 261 阅读 / 1,137 字
温馨提示:
本文最后更新于 2022-03-19,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Acwing 春季每日一题 3370.牛年

思路:

就是一个递推一个,我们需要计算的是E相距B的距离绝对值,但是这样的条件并不是一次给出的,所以我们需要不断的递推,先维护先描述的牛牛距离关系,例如牛A是在B前面Dog年出生的,所以在B的距离是((0 - 9) % 12 + 12) % 12 = 3,所以距离是 0 - 3 = -3,即我们每次维护的hash表d维护的是与B牛的距离关系,表示牛A在B的前面的Dog年出生,E 在 A 的后面的虎年出生,这样答案是 B 在牛年,E在虎年,答案相差1年,
我们计算E与A的关系:
((1 - -3 ) % 12 + 12) % 12 = 4,所以答案是 4 + - 3 = 1。最后的答案是对E与B关系的绝对值,因为E牛可能在B牛的前面,但是答案要求算绝对值。
代码:

#include<iostream>
#include<unordered_map>
#include<string>
using namespace std;

unordered_map<string,int> id{
    {"Ox",0}, {"Tiger",1}, {"Rabbit",2}
    , {"Dragon",3}, {"Snake",4},{"Horse",5}, 
    {"Goat",6}, {"Monkey",7}, {"Rooster",8}
    , {"Dog",9}, {"Pig",10}, {"Rat",11}
};
int n;

int main(){
    cin>>n;
    string p[8];
    unordered_map<string,int> d;//相对位置
    d["Bessie"] = 0;
    
    while(n--){
        for(int i = 0;i < 8;i++) cin>>p[i];
        
        if(p[3] == "previous"){
            //x是 后面牛的位置 y 是前面牛生效的位置
            int x = d[p[7]], y = id[p[4]];
            int r = ((x - y)%12 + 12) % 12;
            if(!r) r = 12;
            d[p[0]] = x - r;
        }
        //在后面的年份
        else{
            //x是 后面牛的位置 y 是前面牛生效的位置
            int x = d[p[7]], y = id[p[4]];
            int r = ((y - x)%12 + 12) % 12;
            if(!r) r = 12;
            d[p[0]] = x + r;
        }
    }
    
    cout<<abs(d["Elsie"])<<endl;
    return 0;
}
0

评论区