小美拿到了一个的矩阵,其中每个元素是 0 或者 1。 小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。 现在,小美希望你回答有多少个的完美矩形区域。你需要回答的所有答案。
区块链毕设网qklbishe.com为您提供问题的解答
小美拿到了一个的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个的完美矩形区域。你需要回答的所有答案。
//利用前缀和,没优化但过了 import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] nums = new int[n][n], sum = new int[n][n]; char[] chars; for (int i = 0; i < n; i++) { chars = in.next().toCharArray(); for (int j = 0; j < n; j++) { nums[i][j] = chars[j] - '0'; if ( i != 0 && j != 0)sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] + nums[i][j]; else if (i != 0)sum[i][j] = sum[i - 1][j] + nums[i][j]; else if (j != 0)sum[i][j] = sum[i][j - 1] + nums[i][j]; else sum[i][j] = nums[i][j]; } } int res = 0, tar; for (int i = 0; i < n; i++) { if (i % 2 == 0) { res = 0; System.out.println(res); } else { for (int j = i; j < n; j++) { for (int w = i; w < n; w++) { if (j == i && w == i)tar = sum[j][w]; else if (j == i)tar = sum[j][w] - sum[j][w - i - 1]; else if (w == i)tar = sum[j][w] - sum[j - i - 1][w]; else tar = sum[j][w] - sum[j][w - i - 1] - sum[j - i - 1][w] + sum[j - i - 1][w - i - 1]; if (tar == (i + 1) * (i + 1) / 2)res++; } } System.out.println(res); } } } }
37:08
以上就是关于问题小美拿到了一个的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个的完美矩形区域。你需要回答的所有答案。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训