问题描述
给定一个n长的数列,有m次操作,第i次操作表示将整个数列循环移动mi位,询问每次操作结束后的开头k个数字
输入格式
第一行三个整数n,m,k。
第二行n个整数表示数列。
接下来m行,每行一个整数mi,表示移动位数,若mi为正,表示向左移mi位,若mi为负数,表示向右移-mi位。
解题思路,将每次移动的步数相加减,最后一次性处理即可
记得加快输入输出,节省时间
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
int n,m,k;
Reader sc=new Reader();
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
n=sc.nextInt();
m=sc.nextInt();
k=sc.nextInt();
int []a=new int[n];
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
int w=0;
for(int i=0;i<m;i++) {
int tar=sc.nextInt();
w+=tar;
w%=n;
if(w<0) {
w+=n;
}
int t=k;
int p=w;
while(t>0) {
out.print(a[p++]+" ");
if(p==n) {
p=0;
}
t--;
}
out.println();
out.flush();
}
}
/** 快速输入类 */
static class Reader {
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
/** 获取下一段文本 */
static String next() throws IOException {
while ( ! tokenizer.hasMoreTokens() ) {
tokenizer = new StringTokenizer(reader.readLine());
}
return tokenizer.nextToken();
}
static int nextInt() throws IOException {
return Integer.parseInt( next() );
}
static double nextDouble() throws IOException {
return Double.parseDouble( next() );
}
}
}