阿里笔试7.31

小强是一个农场主,农场里有n头牛,每头牛有着独一无二的体重,每一头牛的颜色可能跟是m种颜色其中的一种,小强带了一些牛(可能为0个)出来吃草。你需要回答出小强带出来的牛的组合一共有多少种可能?

注意:因为一头牛有自己的体重(没有两头牛体重相等),所以如果四头牛的体重分别是1,2,3,4,颜色分别是y1,y2,y3,y4和另一种方案:四头牛的体重分别是1,2,3,4颜色分别是y1,y3,y2,y4即使两个方案的颜色的种类对应的数量是相同的,但是因为颜色对应的体重不同,所以是两个不同的方案。
由于方案书可能很大,请对1e9+7取模。
输入描述:
两个整数n,m(1≤n,m≤10^9)
输入: 3,2

输出: 27
package org.example;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int m = in.nextInt();
            System.out.printf("%.0f\n", slice(m + 1, n));
        }
    }

    public static double slice(int m, int n) {
        if (n == 1) {
            return m;
        }
        double temp = slice(m, n / 2);
        return ((n % 2 == 0 ? 1 : m) * temp * temp) % 1000000007;
    }
}

小强最近在研究某个飘洋过海的游戏。

游戏可以看成一个n∗mn*mnm的方格图,从左上角(1,1)(1, 1)(1,1)到右下角的(n,m)(n, m)(n,m)有两种地面,CCC表示为陆地SSS表示海洋,每次穿行只能到达上下左右四个格子之一,不能走到方格图之外。

在陆地之间穿行一格需要花费三点行动力,在海洋之间穿行一格需要花费2点行动力。
但是从陆地和从海洋到陆地穿行则需要5点行动力。

输入描述:
第一行输入两个整数n,m,qn, m, qn,m,q,表示方格图的大小和询问次数。
随后nnn行,每行mmm个元素每个元素为'C'或'S',详见样例。

随后q行每行四个数字bx,by,ex,eybx, by, ex, eybx,by,ex,ey,分别代表起点的坐标和终点的坐标。

输入:
4 4 2
CCCS
SSSS
CSCS
SSCC
1 1 3 4
3 1 1 3

输出
13
14

package org.example;// 本题为考试多行输入输出规范示例,无需提交,不计分。

import java.util.Scanner;

public class Main {
    private static boolean[][] isVisit;
    private static int[][] direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
    private static int n, m, q, bx, by, ex, ey, nextX, nextY, currVal, result;
    private static String[] input;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        q = sc.nextInt();
        input = new String[n];
        for (int i = 0; i < n; i++) {
            input[i] = sc.next();
        }
        while (q-- > 0) {
            isVisit = new boolean[n][m];
            result = Integer.MAX_VALUE;
            bx = sc.nextInt();
            by = sc.nextInt();
            ex = sc.nextInt();
            ey = sc.nextInt();
            currVal = 0;
            BackTrace(bx, by);
            System.out.println(result);
        }
    }

    public static boolean isOk(int x, int y) {
        return x >= 0 && x < n && y >= 0 && y < m && !isVisit[x][y];
    }

    public static void BackTrace(int x, int y) {
        if (currVal >= result) {
            return;
        }
        if (x == ex && y == ey) {
            if (currVal < result) {
                result = currVal;
            }
            return;
        }
        for (int i = 0; i < 4; i++) {
            nextX = x + direction[i][0];
            nextY = y + direction[i][1];
            if (isOk(nextX, nextY)) {
                int add = 2;
                if (input[x].charAt(y) != input[nextX].charAt(nextY)) {
                    add = 5;
                } else if (input[nextX].charAt(nextY) == 'C') {
                    add = 3;
                }
                isVisit[x][y] = true;
                currVal += add;
                BackTrace(nextX, nextY);
                currVal -= add;
                isVisit[x][y] = false;
            }
        }
    }
}



#笔试题目##阿里巴巴#
全部评论
******到忘记打vis标记
点赞 回复 分享
发布于 2020-07-31 22:21
哥啊,你第二题能dfs过,n,m我觉得不超过10
点赞 回复 分享
发布于 2020-07-31 22:24
老哥,第一题中,你用double好像是会产生误差的,在n=20,m=9的时候,用double 最后答案是4899,把double改为long后为4900,真实的答案我用计算器算,也是4900,我用o(N)复杂度去算累加和也是4900
点赞 回复 分享
发布于 2020-08-01 08:59
这道题四个方向遍历就行了,不存在会啥递归
点赞 回复 分享
发布于 2020-08-02 17:33
请问第一题的数学思路是什么呢
点赞 回复 分享
发布于 2020-08-02 19:19
请问一下,有哪位大佬知道,这些题有没有在leetcode上有相似的题呢
点赞 回复 分享
发布于 2020-08-03 16:40
第二题你们都试过吗?楼主的代码我copy了一份发现输出不正确,题目第一行第一列是1,1,应该在输入的时候对四个左边分别-1才能得到正确结果吧。。
点赞 回复 分享
发布于 2020-08-21 16:12

相关推荐

08-30 17:16
门头沟学院 Java
全程40min,无手撕,面试官态度挺好,最后甚至主动介绍组里的项目和情况,搞得都不知道该反问什么了#软件开发笔面经#首先自我介绍1.讲讲List的底层数据结构2.ArrayList的容量和扩容机制了解吗3.讲讲map的底层数据结构和增删的逻辑4.红黑树相比于链表有哪些优点5.多线程中,除了synchronized关键字,还有哪些能确保线程安全6.操作系统中,线程和进程有什么异同点7.java的内存分配是什么样的,哪些在堆上,哪些在栈上?8.讲讲常见的垃圾回收算法和垃圾回收器9.除了socket,还有哪些进程之间的通信方式?10.多线程环境下,对于共享内存有什么机制确保线程安全11.讲讲对线程池的理解,还有哪些数据结构和机制能实现?12.高并发环境下,设计线程池参数时你是怎么考虑的13.讲讲http1.0,http1.1,http2以及http3的发展以及变化14.https是如何建立安全的链接,整个流程?15.对称加密和非对称加密的原理?都有哪些算法实现16.redis的单线程体现在哪,为什么单线程但效率很高17.讲讲mysql的innoDB引擎18.你的项目中有哪些难点,怎么解决的,有多少人参与19.结合项目,讲讲spring,redis,mysql,rabbitMQ这几个组合起来的运行架构和流程20.如何保证数据一致性?redis宕机了怎么办,高并发下如何处理数据21.rebbitMQ怎么确保消息被消费?消费失败了怎么办22.讲讲AOP的原理,在项目中怎么实现的23.日常怎么学习新技术的,对go了解吗,对大模型了解吗24.反问
点赞 评论 收藏
分享
08-26 10:24
已编辑
重庆移通学院 Java
8.26&nbsp;&nbsp;&nbsp;&nbsp;一面1.简单介绍一下项目2.中间件的选型,以及为什么选用这些中间件3.这项目有多大的用户并发量,根据你这个架构估算一下、4.这项目哪个地方设计的不太好,优化一下5.这是前后端分离的项目吗?前端如何部署6.java常用的集合有哪些?线程安全的集合有哪些?7.ArrayList在for循环中一边删除,一边插入,可以吗8.如果让你设计一个list,在for循环中可以一边删除一边插入,你该如何设计9.乐观锁和悲观锁有什么区别10.jvm中full&nbsp;gc&nbsp;和&nbsp;young&nbsp;gc&nbsp;有什么区别11.java会出现内存泄漏吗?什么场景下会出现?12.假如你现在写的一个程序出现了内存泄漏的问题,你该如何分析解决?13.假如你现在写了一个springboot程序,出现了僵尸进程(指部署在服务器上的进程还在,但请求接口没有任何响应),遇到这种问题,如何解决?没有日志14.springboot了解过吗?spring中单例和多例bean有什么区别?controller是单例还是多例?15.springboot如何注入一个bean?@Bean和@Component有什么区别?@Service和@Component有什么区别?16.springboot有哪些格式的配置文件?yml和properties哪个优先级高?可以同时存在吗?17.什么是aop?使用场景?18.springcloud有了解过吗?gateway知道吗?19.数据库用过哪些?查询和检索优化手段有哪些?20.消息中间件哪些比较熟?21.在linux上部署过项目吗?22.如何查看一个进程的运行路径?怎么查看一个进程的网络连接数?23.什么是redis的缓存雪崩?怎么解决?24.平时有做过一些开源项目吗?25.最近学习一些什么知识?成绩第一次面试,比较紧张,AOP听成IOP了,想成IOC来回答了。事后听录音才知道!!!感谢各位大佬之前分享的面经!!!
科大讯飞一面281人在聊 查看25道真题和解析
点赞 评论 收藏
分享
9 41 评论
分享
牛客网
牛客企业服务