360笔试-10.24

题目1

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author wanna
 * @version v1.0
 * @Package com.wanna.main50
 * @date 2021/10/19 11:06 下午
 */
public class Main {
    /*
    @360-1
    时间限制: 3000MS
    内存限制: 786432KB
    题目描述:
       小A的英语考了个不及格,老师很生气,并且发现他英语的语法几乎全错!于是老师决定好好教教他英语语法。
       老师想先从句子结构开始教他。一个句子至少需要包含主谓结构,即主语和谓语,并且主语在前,谓语在后。
       有些句子会在谓语后面加上宾语。避免复杂,本题中句子的顺序严格按照主语-谓语-宾语的顺序(即无宾语前置和倒装等情况)。
       老师给了小A三张单词表,分别是主语单词表、谓语单词表和宾语单词表。老师要让小A用这些单词表中的单词来造句,
       并且规定:谓语有且仅有一个单词,主语和宾语可以包含任意个单词(主语不可为空)。
       老师暂时不想让小A造出能保证意思通顺的句子,他只想让小A能够学会基本的句子结构就行。
       现在,小A根据这些单词造了m条句子,现在假设你是老师,你需要判断每条句子是否符合上述句子结构。

    输入描述
      第一行三个正整数n1,n2,n3,分别表示主语、谓语、宾语单词表的单词数;
      第二行包含n1个单词,单词仅由小写英文字母组成,每两个单词之间有一个空格,单词长度不超过10;
      第三行包含n2个单词,其他格式同上;
      第四行包含n3个单词,其他格式同上;
      第五行一个正整数m;
      接下来m行,每行一个句子。句子由若干单词(至少一个)组成,并且保证出现的单词都在上面的单词表内。每两个单词之间一个空格隔开。
      数据保证一个单词最多只可做一种句子成分。即每个单词仅会出现在一个单词表上。
      1≤n1,n2,n3≤1000,1≤m≤20,1≤句子单词数≤10

      输出描述
      对于每条句子,如果其符合句子结构,输出一行“YES”(不含引号),否则输出一行“NO”(不含引号)。


    样例输入
        3 3 3
        i you he
        am is are
        yours his hers
        5
        i am yours
        you is his
        he are hers yours
        i am am yours
        is his
    样例输出
        YES
        YES
        YES
        NO
        NO
     */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final int n1 = scanner.nextInt();  // 主语的单词数量
        final int n2 = scanner.nextInt();  // 谓语的单词数量
        final int n3 = scanner.nextInt();  // 宾语的单词数量
        Set<String> set1 = new HashSet<>();  // 存放主语
        Set<String> set2 = new HashSet<>();  // 存放谓语
        Set<String> set3 = new HashSet<>();  // 存放宾语
        for (int i = 0; i < n1; i++) {
            set1.add(scanner.next());
        }
        for (int i = 0; i < n2; i++) {
            set2.add(scanner.next());
        }
        for (int i = 0; i < n3; i++) {
            set3.add(scanner.next());
        }
        int m = scanner.nextInt();  // 读取的是下面要输入的句子的数量
        scanner.nextLine();  // 跳转到下一行去
        List<List<String>> data = new ArrayList<>();
        for (int i = 0; i < m; i++) {
            List<String> data0 = Arrays.stream(scanner.nextLine().split(" ")).collect(Collectors.toList());
            data.add(data0);
        }
        data.forEach(e -> process(set1, set2, set3, e));
    }

    // 要求,谓语只能有一个,主语数量>=1,宾语数量>=0,句子结构严格按照`主谓宾`的结构进行
    public static void process(Set<String> set1, Set<String> set2, Set<String> set3, List<String> data0) {
        int weiYuCount = 0, weiYuIndex = 0;
        for (int i = 0; i < data0.size(); i++) {
            final String e = data0.get(i);
            if (set2.contains(e)) {
                weiYuCount++;  // 如果这个词是谓语的话,那么把谓语的数量++
                weiYuIndex = i;  // 修改谓语所在的索引
            }
        }

        // 如果谓语的数量不是1个,return 并输出NO
        if (weiYuCount != 1) {
            System.out.println("NO");
            return;
        }
        // 如果谓语的数量是1个的话...

        // 如果谓语是句子中的第一个单词,那么输出NO
        if (weiYuIndex == 0) {
            System.out.println("NO");
            return;
        }
        System.out.println("YES");
    }
}

题目2

import java.util.Scanner;

/**
 * @author wanna
 * @version v1.0
 * @Package com.wanna.main51
 * @date 2021/10/19 11:07 下午
 */
public class Main {
    /*
    @360-2
    时间限制: 3000MS
    内存限制: 786432KB
    题目描述:
       一日,小A走在路上时看到路边摆着一面大镜子。他对着这面镜子注视了半天,突然发现自己穿越到了另一个世界!

       这个世界很奇怪:他所在的地方可视为一个n行m列的矩阵,每一个位置上都有一个非负整数或者-1。
       这时,他的耳边响起了一个很空灵的声音:“如果您想要回到原来的世界,你需要解决下面的问题:
       你需要在整个矩阵上选择一个正方形区域,使得该区域不包含任何负数,并且该区域内的数字之和最大。”

       然而这个问题对于小A来说还是太难了,所以他请了你来帮忙解决这个问题。



    输入描述
        第一行一个正整数T,表示一共有T组数据。

        对于每组数据,第一行两个正整数n,m,含义见题面;

        接下来一个n行m列的整数矩阵aij。

        1≤n,m≤500,1≤T≤5,aij∈{-1,[0,100]}

        输出描述
        对于每组数据,输出一行一个正整数,表示满足条件的最大值。如果该矩阵全为-1,则输出0.


        样例输入
        1
        4 4
        3 0 5 6
        0 9 -1 4
        -1 8 1 1
        4 -1 5 -1
        样例输出
        12
    @ AC100%
     */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final int T = scanner.nextInt(); // 数据的组数

        // 读取T组数据
        for (int i = 0; i < T; i++) {
            final int n = scanner.nextInt();  // 矩阵的行数
            final int m = scanner.nextInt();  // 矩阵的列数
            int[][] matrix = new int[n][m];  // 矩阵

            // 读取矩阵中的数据...
            for (int j = 0; j < n; j++) {
                for (int k = 0; k < m; k++) {
                    matrix[j][k] = scanner.nextInt();
                }
            }
            process(matrix, n, m);  // 调用处理函数去进行处理...
        }
    }

    public static void process(int[][] matrix, int n, int m) {
        int maxSize = Math.min(m, n);  // 最大的正方形的边长为m和n的最小值
        int max = 0;  // 统计最终的最大值,如果遇到了非负数的正方形,那么就需要与当前值判断书否需要进行更新
        // 遍历所有的边长的正方形
        for (int i = 1; i <= maxSize; i++) {
            // 边长为i的正方形左上角坐标是[0,n-i],纵坐标是[0,m-i],这样下面进行遍历时就不会有非法的情况了...
            for (int x = 0; x <= n - i; x++) {
                for (int y = 0; y <= m - i; y++) {
                    final int check = check(matrix, x, y, i);
                    // 如果check==-1,那么max不变,不然的话,max需要判断是否发生更新
                    max = check == -1 ? max : Math.max(check, max);
                }
            }
        }
        System.out.println(max);
    }

    // (x,y)对应的是左上角的坐标,size代表的是当前的正方形的大小
    public static int check(int[][] matrix, int x, int y, int size) {
        int sum = 0;  // 统计当前正方形中的所有元素之和
        boolean flag = false;  // 表示是否出现过-1了

        // 遍历当前这个正方形中的所有数...
        loop:
        for (int i = x; i < x + size; i++) {
            for (int j = y; j < y + size; j++) {
                if (matrix[i][j] < 0) {  // 如果遇到了负数,那么跳出整个循环
                    flag = true;
                    break loop;
                }
                sum += matrix[i][j];
            }
        }
        return flag ? -1 : sum;  // 如果有负数,那么return -1,不然return sum
    }
}
#360笔试##笔经##360公司#
全部评论
一道能进面试吗
1 回复 分享
发布于 2021-10-24 18:41
感谢
点赞 回复 分享
发布于 2021-10-24 18:06
请问楼主最后进面了吗
点赞 回复 分享
发布于 2022-03-06 16:46
和2022年的一模一样😅
点赞 回复 分享
发布于 2022-08-27 17:05 河南
题目一样例都是错的,我裂开!!
点赞 回复 分享
发布于 2022-09-24 16:32 广东

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
10-16 22:56
门头沟学院 C++
1234567800:歌尔今年给211开14-15k吗,我本地人连面试都不给😂
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
评论
13
23
分享
牛客网
牛客企业服务