L1-112 现代战争 - java

题目解析

丢下k个炸弹,每个炸弹都会向所有当前所有还存在的建筑里最高价值的一幢投下炸弹,将这个建筑所在的一整行和一整列都炸平。

解题思路

暴力模拟即可

代码

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{
	static int N = (int) 1e3;
	static int shu[][] = new int[N + 10][N + 10];

	static int n, m;
	static int x, y;

	static void getMax()
	{
		int mx = 0;
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= m; j++)
			{
				if (shu[i][j] > mx)
				{
					mx = shu[i][j];
					x = i;
					y = j;
				}
			}
		}
	}
	
	static void removeMax()
	{
		// 从第x+1行开始,每行的内容都往上移动
		for (int i = x; i <= n; i ++)
		{
			for (int j = 1; j <= m; j ++)
				shu[i][j] = shu[i + 1][j];
		}
		
		// 从y+1列开始,每列的内容都往左移动
		for (int j = y; j <= m; j ++)
		{
			for (int i = 1; i <= n; i ++)
			{
				shu[i][j] = shu[i][j + 1];
			}
		}
		
		n --;
		m --;
	}

	public static void main(String[] args)
	{
		n = sc.nextInt();
		m = sc.nextInt();
		int k = sc.nextInt();
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= m; j++)
				shu[i][j] = sc.nextInt();
		}
		
		while (k -- > 0)
		{
			getMax();
			
			removeMax();
		}
		
		for (int i = 1; i <= n; i ++)
		{
			for (int j = 1; j <= m; j ++)
			{
				if (j != 1) out.print(" ");
				out.print(shu[i][j]);
			}
			out.println();
		}

		out.flush();
		out.close();
	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
}


团体程序设计天梯赛-练习集-java

赞赏