import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int maxd=100;
static int BIG=10000;
static int r,c,n;
static int[][] d=new int[maxd][maxd];
static int[][] d2=new int[maxd][maxd];
static int[][] ans=new int[maxd][maxd];
static int[] cols=new int[maxd];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int r1,c1,r2,c2,q,kase=0;
for (int i = 0; i < d.length; i++) {
Arrays.fill(d[i], 0);
}
while(true) {
r=sc.nextInt();
c=sc.nextInt();
if(r*r+c*c==0)break;
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++) {
d[i][j]=i*BIG+j;
}
}
n=sc.nextInt();
while(n-->0) {
String cmd=sc.next();//命令
if(cmd.charAt(0)=='E') {
r1=sc.nextInt();
c1=sc.nextInt();
r2=sc.nextInt();
c2=sc.nextInt();
int t=d[r1][c1];d[r1][c1]=d[r2][c2];d[r2][c2]=t;
}else {
int a=sc.nextInt();//次数
int x;
Arrays.fill(cols, 0);
for (int i = 0; i < a; i++) {
x=sc.nextInt();
cols[x]=1;
}
if(cmd.charAt(0)=='D') {
del(cmd.charAt(1));
}else {
inse(cmd.charAt(1));
}
}
}
for (int i = 0; i < ans.length; i++) {
Arrays.fill(ans[i], 0);
}
for (int i = 1; i <=r; i++) {
for (int j = 1; j <=c; j++) {
ans[d[i][j]/BIG][d[i][j]%BIG]=i*BIG+j;
}
}
if(kase>0)System.out.println();
System.out.println("Spreadsheet #"+(++kase));
q=sc.nextInt();//次数
while(q-->0) {
r1=sc.nextInt();
c1=sc.nextInt();
System.out.print("Cell data in ("+r1+","+c1+") ");
if(ans[r1][c1]==0)System.out.println("GONE");
else System.out.println("moved to ("+ans[r1][c1]/BIG+","+ans[r1][c1]%BIG+")");
}
}
}
private static void del(char type) {
for (int i = 0; i < d.length; i++) {
d2[i]=d[i].clone();
}
int cnt=type=='R'?r:c,cnt2=0;//cnt2:目标数组的序号,是连续的
for (int i = 1; i <= cnt ; i++) {
if(cols[i]==0) {//没有被标记的位置复制过去
copy(type,++cnt2,i);
}
}
if(type=='R')r=cnt2;else c=cnt2;//更新
}
private static void inse(char type) {
for (int i = 0; i < d.length; i++) {
d2[i]=d[i].clone();
}
int cnt=type=='R'?r:c,cnt2=0;//cnt2:目标数组的序号,是连续的
for (int i = 1; i <= cnt ; i++) {
if(cols[i]==1) {//标记的位置前面插入一行后,再复制过去
copy(type,++cnt2,0);//插入的全0
}
copy(type,++cnt2,i);
}
if(type=='R')r=cnt2;else c=cnt2;//更新
}
private static void copy(char type, int p, int q) {//目标位,原来数组中的位置
if(type=='R') {
for (int i = 1; i <=c; i++) {
d[p][i]=d2[q][i];
}
}else {
for (int i = 0; i <=r; i++) {
d[i][p]=d2[i][q];
}
}
}
}
UVA 512 java
最新推荐文章于 2022-06-01 20:52:16 发布