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;
        } 
    } 
    

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

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

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/FXY-180/p/9609108.html
Copyright © 2011-2022 走看看