zoukankan      html  css  js  c++  java
  • 巨大的棋盘

    链接:https://www.nowcoder.com/acm/contest/164/B
    来源:牛客网

    题目描述

    小A站在一个巨大的棋盘上。这个棋盘可以看成是一个网格图。这个网格图的大小为n*m。左上角坐标为(1,1),右下角坐标为(n,m)。这个棋盘很特别,他每行每列都是一个环。具体来说,当小A站在第一行,他往上走的时候,他会走到第n行,站在第n行往下走会走到第一行。对于第一列和第m列类似。小A在棋盘上可以上下左右走,假设他站在位置(i,j),向上走,会走到(i-1,j),向下回到(i+1,j),向左到(i,j-1),向右到(i,j+1)。注意由于棋盘是循环的,他不会走出这个棋盘。
    现在小A有一个固定的行走序列S,代表他每一步走的方向,U代表向上,D代表向下,L代表向左,R代表向右。比如小A一开始在(1,1),棋盘大小为3*4。行走序列为UULRD。那么他会依次经过(3,1),(2,1),(2,4),(2,1),(3,1)。但小A觉得只走一遍S太无聊,因此他会重复走这个序列T次。比如上面的例子,当T=2时,真正的行走序列为UULRDUULRD。
    小A有q个备选的起点位置。他一开始先给定你棋盘大小与行走序列,对于每个起点位置,他想知道,他沿着序列走,最终会走到哪个位置停下。

    输入描述:

    第一行三个整数n,m,T。
    接下来一行一个字符串S,代表行走序列。注意行走序列在真实走的时候要重复T次。
    接下来一个整数q。
    接下来q行,每行两个整数x,y,代表小A的一个备选起点。

    输出描述:

    输出q行,每行两个整数,输出对于这个起点,最后的终点是哪里。
    示例1

    输入

    复制
    3 6 4
    DUUUDLLLLR
    3
    3 2
    2 5
    1 4
    

    输出

    复制
    2 2
    1 5
    3 4
    

    备注:

    20%: |S| * T <= 10^6, q = 1
    40%: |S| * T <= 10^6, q <= 10^5
    60%: |S|, T <= 10^5, q <= 10^5
    100%: 1 <= T,n,m <= 10^9, 1 <= x <= n, 1 <= y <= m. 1<= q, |S| <= 10^5
    其中|S|代表S的长度。



    新学期的第一次训练,出门的时候超想睡觉开心。
    一来就知道了一个让人崩溃的好消息,要打NOIP的模拟赛。
    四道题我这个蒟蒻才拿120分QAQ。
    这道题是个模拟,不过要注意细节。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 long long n,m,t,q,sum_x,sum_y,prx[100005],pry[100005];//这里还要开long long  
     4 char s[100005];
     5 void print()
     6 {
     7     for(int i=1;i<q;i++) printf("%lld %lld
    ",prx[i],pry[i]);
     8     printf("%lld %lld",prx[q],pry[q]);
     9 }
    10 int main()
    11 {
    12     scanf("%lld%lld%lld",&n,&m,&t);
    13     cin>>s;
    14     for(int i=0;i<strlen(s);i++)
    15     {
    16         if(s[i]=='U') sum_x--;
    17         if(s[i]=='D') sum_x++;
    18         if(s[i]=='L') sum_y--;
    19         if(s[i]=='R') sum_y++;
    20     }
    21     sum_x*=t;
    22     sum_y*=t;
    23     scanf("%lld",&q);
    24     for(int i=1;i<=q;i++)
    25     {
    26         long long sx,sy;//要开long long  
    27         scanf("%lld%lld",&sx,&sy);
    28         sx+=sum_x;
    29         sy+=sum_y;
    30         sx=((sx-1)%n+n)%n+1;//注意这里的细节 
    31         sy=((sy-1)%m+m)%m+1;
    32         prx[i]=sx;
    33         pry[i]=sy;
    34     }
    35     print();
    36     return 0;
    37 }
  • 相关阅读:
    淘宝从几百到千万级并发的十四次架构演进之路!
    19 个强大、有趣、好玩、又装B的 Linux 命令!
    Spring Boot实战:拦截器与过滤器
    初识zookeeper,linux 安装配置zookeeper
    Spring-boot:5分钟整合Dubbo构建分布式服务
    Spring-Boot:6分钟掌握SpringBoot开发
    Dubbo的使用及原理浅析.
    Java消息队列--ActiveMq 初体验
    关于Ubuntu 常用的简单指令
    IBM、HPUX、Solaris不同之处
  • 原文地址:https://www.cnblogs.com/jiuduSHENBENG/p/9609077.html
Copyright © 2011-2022 走看看