import java.util.*;

        /*有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
        输入描述:
        空格分隔的两个字符串,代表输入的两个大整数

        输出描述:
        输入的乘积,用字符串表示

        输入例子1:
        72106547548473106236 982161082972751393

        输出例子1:
        70820244829634538040848656466105986748*/
public class Main {public static void convert(char[] c){for (int i = 0; i < c.length / 2; i++) {c[i] += c[c.length - 1 - i];
            c[c.length - 1 - i] = (char)(c[i] - c[c.length - 1 - i]);
            c[i] = (char)(c[i] - c[c.length - 1 - i]);
        }}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);

        String s1 = scanner.next();
        String s2 = scanner.next();

        //转换为字符数组
        char[] c1 = s1.toCharArray();
        char[] c2 = s2.toCharArray();

        //创建结果数组,储存最终结果
        int[] res = new int[c1.length + c2.length + 3];
        for (int i = 0; i < res.length; i++) {res[i] = 0;
        }//对s1与s2数组的高低位交换处理
        convert(c1);convert(c2);

        //不考虑进位对c1与c2的各个位置相乘
        for (int i = 0; i < c1.length; i++) {for (int j = 0; j < c2.length; j++) {res[i+j] += Integer.parseInt(String.valueOf(c1[i]))* Integer.parseInt(String.valueOf(c2[j]));
            }}//进位处理
        for (int i = 0; i < res.length; i++) {//获取进位
            int carry = res[i] / 10;
            res[i] = res[i] % 10;
            if(carry > 0){res[i + 1] += carry;
            }}//输出处理,先查找前导0的位置
        int indexOfNonZero = 0;
        for (int i = res.length -1; i >=0 ; i--) {if(res[i] > 0){indexOfNonZero = i;
                break;
            }}//从后往前输出
        for (int i = indexOfNonZero; i >= 0 ; i--) {System.out.print(res[i]);
        }}}
import java.util.*;
/*假设一个探险家被困在了地底的迷宫之中,要从当前位置开始找到一条通往迷宫出口的路径。迷宫可以用一个二维矩阵组成,
    有的部分是墙,有的部分是路。迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与之匹配的钥匙,
    只有先拿到钥匙才能打开门。请设计一个算法,帮助探险家找到脱困的最短路径。如前所述,迷宫是通过一个
    二维矩阵表示的,每个元素的值的含义如下 0-墙,1-路,2-探险家的起始位置,3-迷宫的出口,大写字母-门,
    小写字母-对应大写字母所代表的门的钥匙
        输入描述:
        迷宫的地图,用二维矩阵表示。第一行是表示矩阵的行数和列数M和N
        后面的M行是矩阵的数据,每一行对应与矩阵的一行(中间没有空格)。M和N都不超过100, 门不超过10扇。

        输出描述:
        路径的长度,是一个整数

        输入例子1:
        5 5
        02111
        01a0A
        01003
        01001
        01111

        输出例子1:
        7*/
public class Main {static class Node{int x;
        int y;
        int key;
        public Node(int x,int y,int key){this.x = x;
            this.y = y;
            this.key = key;
        }}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);

        int m = scanner.nextInt();
        int n = scanner.nextInt();
        char[][] datas = new char[m][n];
        for (int i = 0; i < m; i++) {char[] chars = scanner.next().toCharArray();
            datas[i] = chars;
        }//寻找初始位置和结束位置
        int startX = 0;int startY = 0;
        int endX = 0;int endY = 0;
        for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if(datas[i][j] == '2'){startX = i;
                    startY = j;
                    continue;
                }if(datas[i][j] == '3'){endX = i;
                    endY = j;
                }}}System.out.println(bfs(m,n,startX,startY,endX,endY,datas));

    }public static int bfs(int m, int n,int startX,int startY,int endX,int endY,char[][] datas){//定义4个方向,上下左右
        int [] xx ={0,0,1,-1};
        int [] yy ={1,-1,0,0};

        LinkedList<Node> queue = new LinkedList<>();

        //1024正好是十个钥匙的状态
        int[][][] keys = new int[m][n][1024];
        for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {for (int k = 0; k < 1024; k++) {keys[i][j][k] = Integer.MAX_VALUE;
                }}}/**
         * keys的作用:
         *      1>3key的作用保证每个位置都携带一个钥匙的状态,这样当发现某个位置是门或者是钥匙的时候就可以及时的更新
         *      2>这个三维数组的目的是判断当前位置和当前钥匙状态下,是否访问过,没有访问过就+1,并添加至队列
         *              访问过就不再添加;其实就是记录步数!!
         */

        queue.add(new Node(startX,startY,0));
        keys[startX][startY][0] = 0;

        while(queue.size() > 0){Node node = queue.poll();

            int x = node.x;
            int y = node.y;
            int key = node.key;

            //判断是否到达最后位置
            if(x == endX && y == endY){return keys[x][y][key];
            }//从四个方向开始找临节点
            for (int i = 0; i < 4; i++) {x = node.x + xx[i];
                y = node.y + yy[i];
                key = node.key;

                //判断当前位置是否出界
                if(!(x >=0 && x < m && y>=0 && y < n && datas[x][y] !='0')){//出界
                    continue;
                }//看当前位置是否有钥匙,更新钥匙状态
                if(datas[x][y] >= 'a' && datas[x][y] <= 'j'){key = key | (0x1 << (datas[x][y] - 'a'));
                }//看当前位置是否是门
                if(datas[x][y] >= 'A' && datas[x][y] <= 'J'){if(!((key & (0x1 <<(datas[x][y] - 'A'))) > 0)){//没有对应的钥匙,退出当前位置
                        continue;
                    }}//判断当前状态是否走过
                if (keys[x][y][key] == Integer.MAX_VALUE) {keys[x][y][key] = keys[node.x][node.y][node.key] + 1;
                    queue.add(new Node(x, y, key));
                }}}return Integer.MAX_VALUE;
    }}

拼多多笔试_探险家冒险和大数问题相关推荐

  1. 20200802拼多多笔试题目

    20200802拼多多笔试题目 第一题 python代码示例 第二题 python代码 第三题 提交的版本 完善版本 双指针代码 第四题   拼爹爹的题目感觉出的还是比较有水准的,不管怎么样测试用例是 ...

  2. Java算法:牛客网拼多多笔试真题算法Java版1-13题

    题号 题目 知识点 难度 通过率 PDD1 最大乘积 贪心模拟 中等 14.45%PDD2 大整数相乘 模拟 中等 27.32%PDD3 六一儿童节 贪心 中等 24.74%PDD4 迷宫寻路 模拟 ...

  3. 我胡汉三又回来了之拼多多笔试复盘

    天朗气清,惠风和畅.一个阳光明媚的日子,王豆子终于想起了被leetcode支配的恐惧以及TA的csdn账号,又回来了. 笔记本写不下了,所以用博客记录一下. 今天复盘一下拼多多的笔试,第一个题比较简单 ...

  4. 2021秋招拼多多笔试算法题

    1.现有一个n*m的矩阵,矩阵中每个格子都有且只有一种颜色.矩阵中共有k种颜色,每个颜色通过特定数字C(i,j)表示.设初始位置位于(1,1),每次可以向右(x+1,y)者向下(x,y+1)移动一个单 ...

  5. 拼多多笔试 公司套餐

    多多公司每天给员工提供免费的三餐,而小多由于习惯性赖床,所以他从来吃不 到早餐. 今天公司提供了N套中餐和M套晚餐,每种套餐分别有一个热量值X和美味值Y. 小多想知道,在满足美味值之和不少于T的情况下 ...

  6. python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务

    实现一个简易的秒杀服务,有3个接口: 1. 添加一个秒杀活动 addActivity(int startTime, int endTime, int goodsId, int limitQuantit ...

  7. python 拼多多秒杀_干货 | Jmeter 如何保证类似拼多多抢购、秒杀活动正常运行?...

    3. 操作步骤 打开 Jmeter 软件,我们完成下列操作 3-1  创建线程组,配置 CSV 数据文件 首先,选中测试计划,右键 - 添加 - 线程(用户),并对线程组重新进行命名 线程数为:模拟 ...

  8. 9-1拼多多笔试第四题

    题意:给出一个数n和m个数,求n关于m的子集. 思路:容斥原理,求所有m的集合,在这个集合的所有数,求一下lcm(最小公倍数),如果|集合|是奇数,ans+=n/lcm,否则ans-=n/lcm . ...

  9. 2021 8.8拼多多笔试第三题解答

    第三题输出括号匹配  输入包含 "( ) L R D " 题目以后补充.... import java.util.Arrays; import java.util.Scanner; ...

  10. 2019.4.3拼多多笔试第一题

    题目:给定一个元素个数为偶数的数组arr,将该数组中的元素两两配对并求和,在这些和中选出最大和最小值,请问该如何对其两两配对,才能让最大值和最小值的差为最小? 输入描述: 一共2行输入. 第一行为一个 ...

最新文章

  1. ios NSString 正则表达式 其它字符
  2. STM32的SPI时钟
  3. python下载文件加上日期_python拷贝文件夹中特定日期内的文件
  4. 技术动态 | eBay开源分布式知识图谱存储Beam,支持类SPARQL查询
  5. android 手机内存uri_android 的各种目录详解
  6. 下载java的jdk
  7. Cygwin 的代理设置(同 Linux)
  8. 谷歌:朝鲜国家黑客第二次攻击安全研究员
  9. 短信猫JAVA二次开发包SMSLib,org.smslib.TimeoutException: No response from device解决方案...
  10. APP营销案例分析------从西柚姨妈神庙看西柚经期助手的公关传播
  11. 防止屏蔽,背投广告代码的完善
  12. 利用微信JSSDK调用微信扫一扫功能
  13. 刨根究底字符编码之零——前言
  14. phpStorm 配置关联php手册
  15. 保龄球计分c语言,保龄球的好处、起源、计分规则、常用技法
  16. java中activeThread_java多线程机制中的Thread和Runnable()区别
  17. 使用PPT制作倒计时
  18. MySQL高级-04-授课笔记
  19. 阅读替换净化规则_免费阅读APP-阅读下载 v3.2安卓版(免费小说阅读器纯净无广告)-KK下载站...
  20. 大数据行业六大核心发展趋势

热门文章

  1. 几款基于ODE的机器人仿真软件
  2. 迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习
  3. 雨滴win7计算机路径,win7雨滴桌面秀 Raindrop Desktop Show教程_计算机软件和应用程序_IT /计算机_信息...
  4. 触摸屏驱动开发——转载
  5. 信号处理之freqz函数
  6. java学习(分布式架构)
  7. 计算机网络自顶向下第七版第四章答案,《计算机网络·自顶向下方法》第七版 第四章 课后习题与问题 答案...
  8. 050、动手实验:使用 jstat 摸清线上系统的JVM运行状况
  9. python 包之 Pygame 游戏开发教程
  10. 从事游戏开发怎么入门