蓝桥杯:连连看
https://i-blog.csdnimg.cn/direct/31e1204121f24ad598f159b77a5b7281.png本题大意要我们在一个给定的nxm的矩形数组中找出符合条件的格子
条件如下:
1.数值相同
2.两个横坐标和纵坐标的差值相等(由此可得是一个对角线上的格子)
那么根据以上条件我们可以用HashMap来解决这个问题,统计对角线上数值相同的格子有几个。
以下是代码的实现:(getOrDefault解决数组中没有这个key的情况。)记得输出的时间乘2因为双向统计
package 连连看;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
static int[][] a=new int ;
static long result=0;
static int n,m ;
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
n =scanner.nextInt();
m =scanner.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <=m ; j++) {
a=scanner.nextInt();
}
}
for (int i = 1; i <=n ; ++i) {
//先处理从左上到右下角的对角线
g_l(i,1);
g_r(i,1);
}
for (int i = 2; i <=m ; ++i) {
//先处理从左上到右下角的对角线
g_l(1,i);
g_r(n,i);
}
System.out.println(result*2);
}
static void g_l(int x, int y) {
HashMap<Integer,Integer> hm=new HashMap<>();
while (x<=n&&y<=m)
{
result+=hm.getOrDefault(a,0);
hm.put(a,hm.getOrDefault(a,0)+1);
x++;
y++;
}
}
//从左下角到右上角的对角线
static void g_r(int x, int y) {
HashMap<Integer,Integer> hm=new HashMap<>();
while (x>0&&y<=m)
{
result+=hm.getOrDefault(a,0);
hm.put(a,hm.getOrDefault(a,0)+1);
x--;
y++;
}
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]