链接:https://www.nowcoder.com/acm/contest/164/B
来源:牛客网
第一行三个整数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的长度。
新学期的第一次训练,出门的时候超想睡觉开心。
一来就知道了一个让人崩溃的好消息,要打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\n",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 }
原文:https://www.cnblogs.com/jiuduSHENBENG/p/9609077.html