atcoder_beginer335-C

超时超麻了,最后才想出来如何优化,/(ㄒoㄒ)/~~

题目

这是一道模拟贪吃蛇的题目,题意还是很好理解的,让头先走,再让后面的部分走向其前一位的部分b[i] = b[i-1](b用来存放每一部分的位置)。我一开始只是循环进行龙的移动的,然后就超时了。。。

所以这里用队列的结构来进行优化,将每一次龙头移动后的新位置填入数组的新一位,之后我们对每一部分进行访问时只要通过龙头现在在数组中的下标进而访问每一部分就可以知道了。

    #include<iostream>
    #include<vector>
    #include<queue>
    using namespace std;
    typedef pair<int,int> PII;
    const int N =1e8+10;
    int n, q;
    int a , a1 ;
    char c;
    PII b[N];
    int main(){
        cin>>n>>q;
        int l = 1, r = n;
        for(int i =1 ; i <= n ; i++ ){
            b[i].first = n - i +1;
        }
        // for(int i = n ; i >= 1 ; i--) cout<<b[i].first<<" ";
        while(q--){
            scanf("%d",&a);
            if(a == 2){
                scanf("%d" ,&a1);
                printf("%d %d\n" ,b[r - a1 + 1].first , b[r - a1 + 1].second);
            }
            else{
                cin>>c;
                l++;
                r++;
                if(c == 'U'){
                    b[r].first = b[r-1].first;
                    b[r].second  = b[r-1].second + 1 ;
                    
                }
                else if(c == 'D'){
                    b[r].first = b[r-1].first;
                    b[r].second = b[r- 1].second - 1;
                }
                else if(c == 'R'){
                    b[r].second = b[r- 1].second;
                    b[r].first = b[r-1].first + 1;
                }
                else if(c == 'L'){
                    b[r].second = b[r- 1].second;
                    b[r].first  = b[r - 1].first - 1;
                }
            }
        }    
        
        return 0;
    } 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鴎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值