zoukankan      html  css  js  c++  java
  • C++ 牛客普及组B

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描述

    小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的长度。

    这道题只需要使用模拟就可以了。
    但是为了避免时间超限,所以我们就需要开一个long long。
    #include<bits/stdc++.h>
    using namespace std;
    long long int n,m,sum,ans,t,n1,D,U,R,L;
    char h[100000];
    int main()
    {
    	scanf("%d%d%d",&n,&m,&t);
    	cin>>h+1;
    	cin>>n1;
    	int p=strlen(h);
    	for(int i=0;i<=p;i++)
    	{
    		if(h[i]=='D')D++; 
    			if(h[i]=='U')U++; 
    				if(h[i]=='R')R++; 
    					if(h[i]=='L')L++; 
    	}
    	sum=(U-D)*t;
    	ans=(R-L)*t;
        while(n1!=0)
        {
        	int x,y,i=1;
        	n1--;
        	cin>>x>>y;
        	for(int k=1;k<=t;k++)
        	{
        		i=1;
        		p=4*strlen(h);
        		while(p!=0)
        	   {
    		     p--;
    	         if(h[i]=='D')x+=1;
    		     if(h[i]=='U')x-=1;
    		     if(h[i]=='L')y-=1;
    		      if(h[i]=='R')y+=1;
    		      i++;
    			  if(x>n)x=0;
    			  if(x<=0)x=n;
    			  if(y>m)y=0;
    			  if(y<=0)y=m;	 
    	      }
    		}	
    	   cout<<x<<" "<<y<<endl;
        } 
    } 
    

      我的代码有可能不对,因为题是老师给的,没有测评过。 

           欢迎大家对我的代码进行修改。

  • 相关阅读:
    冲刺第二阶段第五天
    找水王2
    冲刺第二阶段第四天
    梦断代码阅读笔记03
    冲刺第二阶段第三天
    冲刺第二阶段第二天
    冲刺第二阶段第一天
    梦断代码阅读笔记02
    第十二周学习进度条
    找水王
  • 原文地址:https://www.cnblogs.com/FXY-180/p/9609108.html
Copyright © 2011-2022 走看看