牛客刷题记录1

题1:坐标求和

java 复制代码
import java.util.*;

class Solution {
    public long sumSelected(long[][] matrix, List<int[]> coords) {
        long total = 0;
        for (int[] opt : coords) {
            total += matrix[opt[0]][opt[1]];
        }
        return total;
    }
}


public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        if(!sc.hasNextInt())
            break;
        int m = sc.nextInt();
        if(!sc.hasNextInt())
            break;
        int n = sc.nextInt();

        long[][] matrix = new long[m][n];

        //注意这里不能用while  因为后面还有输入  直接进入死循环
        // while(sc.hasNextInt()) {
        //     for (int i = 0; i < m; i++) {
        //         for (int j = 0; j < n; j++) {
        //             matrix[i][j] = sc.nextLong();
        //         }
        //     }
        // }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] = sc.nextLong();
            }
        }

        if(!sc.hasNextInt())
            break;
        int q = sc.nextInt();

        List<int[]> list = new ArrayList<>(q);
        while(sc.hasNextInt()) {
            for (int i = 0; i < q; i++) {
                int r = sc.nextInt();
                int c = sc.nextInt();

                list.add(new int[] {r, c});
            }
        }

        System.out.println(solution.sumSelected(matrix, list));
        
    }
    sc.close();
}

题2:坐标移动

正则表达式好用!

  • [abc] - 匹配 a、b 或 c 中的一个字母 测验
  • [a-z] - 匹配 a 到 z 中的一个字母 测验
  • [^abc] - 匹配除了 a、b 或 c 中的其他字母测验
  • {n} - 匹配 n测验
  • {n,} - 匹配 n 次以上 测验
  • {m ,n} - 最少 m 次,最多 n 次匹配 测验
java 复制代码
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        //输入处理,并对字符进行分割
        Scanner sc = new Scanner(System.in);
        String[] in = sc.nextLine().split(";");


        //设置坐标原始值
        int x = 0;
        int y = 0;

        //对分割之后的每个字符进行处理
        for (String s : in) {
            //对字符进行匹配,因为最多两位数,所以就最少匹配1次,最多匹配2次
            if (!s.matches("[WASD][0-9]{1,2}")) {
                continue;
            }
            //截取数字部分并转换为整数
            int step = Integer.valueOf(s.substring(1));
            //对第一位字符进行方向匹配,并做对应的移动
            switch (s.charAt(0)) {
                case 'W':
                    y += step;
                    break;
                case 'S':
                    y -= step;
                    break;
                case 'A':
                    x -= step;
                    break;
                case 'D':
                    x += step;
                    break;
            }
        }
        //输出结果
        System.out.println(x + "," + y);
        //关闭scanner
        sc.close();

        
    }
}
相关推荐
workflower8 小时前
用硬件换时间”与“用算法降成本”之间的博弈
人工智能·算法·安全·集成测试·无人机·ai编程
重生之我是Java开发战士10 小时前
【动态规划】简单多状态dp问题:按摩师,打家劫舍,删除并获得点数,粉刷房子,买卖股票的最佳时机
算法·动态规划·哈希算法
KAU的云实验台10 小时前
单/多UAV、静/动态路径规划,基于PlatEMO平台的带约束多目标优化 本文核心内容:
算法·matlab·无人机
Liangwei Lin11 小时前
洛谷 P1807 最长路
数据结构·算法
会编程的土豆11 小时前
【数据结构与算法】二叉树从建立开始
数据结构·c++·算法
_日拱一卒11 小时前
LeetCode:最大子数组和
数据结构·算法·leetcode
计算机安禾11 小时前
【数据结构与算法】第22篇:线索二叉树(Threaded Binary Tree)
c语言·开发语言·数据结构·学习·算法·链表·visual studio code
算法鑫探11 小时前
解密2025数字密码:数位统计之谜
c语言·数据结构·算法·新人首发
计算机安禾12 小时前
【数据结构与算法】第21篇:二叉树遍历的经典问题:由遍历序列重构二叉树
c语言·数据结构·学习·算法·重构·visual studio code·visual studio