首页 > 其他分享 >游游的you矩阵(携程24秋招研发岗第一批)

游游的you矩阵(携程24秋招研发岗第一批)

时间:2024-04-16 19:24:17浏览次数:21  
标签:24 int 矩阵 游游 MAXN new 秋招 static

题面

游游拿到了一个字符矩阵,她想知道有多少个三角形满足以下条件:
  1. 三角形的三个顶点分别是 y、o、u 字符。

  2. 三角形为直角三角形,且两个直角边一个为水平、另一个为垂直。

输入

第一行输入两个正整数n,m,用空格隔开,代表矩阵的行数和列数。
接下来的n行,每行输入一个长度为m的字符串,代表游游拿到的矩阵。
1\(<=\) n,m \(<=\) 1000

输出

输出一个整数,代表满足条件的三角形个数。
示例1
输入例子:

2 3
you
our

输出例子:

3

核心思想

首先应该枚举90度角的字符 因为这是唯一的。 然后看四种直角三角形有多少个

两个前缀和 分别为行前缀和 与 列前缀和 表示当前点所在行之前的y o u 字符分别有多少个(或者是列) 以减少时间复杂度
那么当前字符如果是 y 利用前缀和求出 四个方向的o u 分别有多少个 然后相乘即可。

代码

import java.util.*;

class Main {
    static final int MAXN = 1010;
    static char[][] chs = new char[MAXN][MAXN];
    static int[][][] y = new int[MAXN][MAXN][2];
    static int[][][] o = new int[MAXN][MAXN][2];
    static int[][][] u = new int[MAXN][MAXN][2];
    static long res = 0;
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        for(int i = 1; i <= n; i++){
            char[] charArray = scanner.next().toCharArray();
            for(int j = 0; j < m; j++){
                chs[i][j + 1] = charArray[j];
            }
        }
        // 0 为行 1为列
        // 行前缀和
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                char ch = chs[i][j];
                y[i][j][0] = y[i][j - 1][0] + (ch == 'y'? 1: 0);
                o[i][j][0] = o[i][j - 1][0] + (ch == 'o'? 1: 0);
                u[i][j][0] = u[i][j - 1][0] + (ch == 'u'? 1: 0);
            }
        }

        // 列前缀和
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                char ch = chs[i][j];
                y[i][j][1] = y[i - 1][j][1] + (ch == 'y'? 1: 0);
                o[i][j][1] = o[i - 1][j][1] + (ch == 'o'? 1: 0);
                u[i][j][1] = u[i - 1][j][1] + (ch == 'u'? 1: 0);
            }
        }

        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                char ch = chs[i][j];
                if(ch == 'y'){
                    // 上右
                    res = res + o[i][j][1] * (u[i][m][0] - u[i][j][0]);
                    res = res + u[i][j][1] * (o[i][m][0] - o[i][j][0]);
                    // 右下
                    res = res + (o[i][m][0] - o[i][j][0]) * (u[n][j][1] - u[i][j][1]);
                    res = res + (u[i][m][0] - u[i][j][0]) * (o[n][j][1] - o[i][j][1]);
                    // 下左
                    res = res + (o[n][j][1] - o[i][j][1]) * u[i][j][0];
                    res = res + (u[n][j][1] - u[i][j][1]) * o[i][j][0];
                    // 左上
                    res = res + o[i][j][0] * u[i][j][1];
                    res = res + u[i][j][0] * o[i][j][1];
                }else if(ch == 'o'){
                    // 上右
                    res = res + y[i][j][1] * (u[i][m][0] - u[i][j][0]);
                    res = res + u[i][j][1] * (y[i][m][0] - y[i][j][0]);
                    // 右下
                    res = res + (y[i][m][0] - y[i][j][0]) * (u[n][j][1] - u[i][j][1]);
                    res = res + (u[i][m][0] - u[i][j][0]) * (y[n][j][1] - y[i][j][1]);
                    // 下左
                    res = res + (y[n][j][1] - y[i][j][1]) * u[i][j][0];
                    res = res + (u[n][j][1] - u[i][j][1]) * y[i][j][0];
                    // 左上
                    res = res + y[i][j][0] * u[i][j][1];
                    res = res + u[i][j][0] * y[i][j][1];
                }else if(ch == 'u'){// u
                    // 上右
                    res = res + y[i][j][1] * (o[i][m][0] - o[i][j][0]);
                    res = res + o[i][j][1] * (y[i][m][0] - y[i][j][0]);
                    // 右下
                    res = res + (y[i][m][0] - y[i][j][0]) * (o[n][j][1] - o[i][j][1]);
                    res = res + (o[i][m][0] - o[i][j][0]) * (y[n][j][1] - y[i][j][1]);
                    // 下左
                    res = res + (y[n][j][1] - y[i][j][1]) * o[i][j][0];
                    res = res + (o[n][j][1] - o[i][j][1]) * y[i][j][0];
                    // 左上
                    res = res + y[i][j][0] * o[i][j][1];
                    res = res + o[i][j][0] * y[i][j][1];
                }
            }
        }
        System.out.println(res);

    }
}

标签:24,int,矩阵,游游,MAXN,new,秋招,static
From: https://www.cnblogs.com/ganyq/p/18138994

相关文章

  • 2024-04-16 闲话
    今天因为https://mp.weixin.qq.com/s/vEcWmJCA8GP9h311viSJwQ被很多人辱骂了。然后简单思考了一下如何回应这种问候,然后自然想到了从https://m.cyol.com/gb/articles/2023-04/20/content_X5eNg6HpYg.html入手使用格林公式解决。具体格林公式如下:......
  • 【2024蓝桥B组】好数
    好数题目 题目分析1.蓝桥杯不怕麻烦的,一般可以选择用longlongint替换int,防止数据过大2.这道题不怕麻烦的话,可以直接暴力解,用多个if语句进行判断即可3.想要美观点的,就进行数位判断4.这道题就一个关键点:奇数位对奇数,偶数位对偶数代码1#include<iostream>usingname......
  • 【专题】中国纯电新能源汽车-市场发展和用车报告2024年报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35878原文出处:拓端数据部落公众号2023年,纯电车型在新能源市场中占据高达七成的市场份额,尽管技术挑战仍然存在。插混及增程车型在续航里程和驾驶体验上取得显著进步,但纯电车型仍占据主导地位。预计未来几年,插混及增程车型市场份额将持续攀升,为市场......
  • Ubuntu 24.04 LTS (Noble Numbat) 下载
    Ubuntu24.04LTS(NobleNumbat)下载Ubuntu24.04LTS开启Beta测试,正式版即将发布请访问原文链接:Ubuntu24.04LTS(NobleNumbat),查看最新版。原创作品,转载请保留出处。作者主页:sysin.org无耻抄袭者YuTao,请立遁!!!Ubuntu24.04LTS首个Beta已发布。本次Beta测......
  • 揭秘2024年DevOps顶级工具
    DevOps工具对于作为价值流的基本要素的透明度、自动化和合作起着决定性作用。这些工具对于建立一个高效的信息和技术知识分享及交换渠道至关重要,涵盖了包括开发、运维、安全和商业团队在内的所有相关方。这种合作方式确保了沟通和知识能够顺畅流动,极大地促进了产品交付流程的效......
  • 24/04/16 树
    \(\color{red}(-114514)\)P1424小鱼的航程(改进版)有一只小鱼,它平日每天游泳\(250\)公里,周末休息(实行双休日),假设从周\(x\)开始算起,过了\(n\)天以后,小鱼一共累计游泳了多少公里呢?太难了,先咕咕咕。\(\color{red}(1)\)UOJ387ToDoTree有\(n\)个任务,做第\(i\)个......
  • 2024 热门低代码平台盘点,十大主流低代码开发平台
    随着数字化转型的浪潮席卷全球,零代码平台成为企业快速构建应用程序的首选工具。国内低代码市场也呈现出蓬勃发展的态势,各种低代码平台如雨后春笋般涌现。本文将对2024年度国内低代码平台进行热度排名,以帮助企业和开发者更好地了解市场情况,选择适合自己的低代码平台。国内十大......
  • 十三载求索续风华,数智化扬帆启新航 | 万字长文回顾DTC 2024
    4月13日下午,为期两天的第十三届数据技术嘉年华(DTC2024)在北京新云南皇冠假日酒店圆满落下帷幕。本次大会由中国数据库联盟与墨天轮社区联合主办,以“智能·云原生·一体化——DB与AI协同创新,模型与架构融合发展”为主题,汇聚80余位行业杰出技术领袖、学术精英、行业实践者、生态布......
  • 2024.4.16 训练1(VP) CodeForces自创MashUP训练赛(rating1200-1400)
    mashup链接:https://codeforces.com/gym/518192A.FriendlyArrays经典位运算,这里有个小trick,就是涉及到逻辑运算符的都把每一位拆开来看看影响根据或运算的性质,对于a数列每个数的某一位来说,如果b数组中某个数在这一位上有1,那么在a数组的每个数的这一位都能保证变为1。而在后面......
  • 裁员了!别错过2024年大数据工程师必备的10项技能
    在当今快速发展的世界中,数据被视为新的石油。随着对数据驱动洞察的日益依赖,大数据工程师的角色比以往任何时候都更为关键。这些专业人员在管理和优化组织内的数据操作中扮演着至关重要的角色。在本文中,我们将探索2024年大数据工程师必须具备的十项技能。理解大数据工程师的角色......