第一行三个整数n,m,T。
接下来一行一个字符串S,代表行走序列。注意行走序列在真实走的时候要重复T次。
接下来一个整数q。
接下来q行,每行两个整数x,y,代表小A的一个备选起点。
输出q行,每行两个整数,输出对于这个起点,最后的终点是哪里。
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;
}
}
我的代码有可能不对,因为题是老师给的,没有测评过。
欢迎大家对我的代码进行修改。
原文:https://www.cnblogs.com/FXY-180/p/9609108.html