首页 > 其他分享 >找矩阵

找矩阵

时间:2024-08-21 09:15:40浏览次数:7  
标签:cnt int 矩阵 3005 && x2 y2

  • 通过矩阵转置,归并行、列两种情况
  • 先行后列表示坐标
点击查看代码
#include <bits/stdc++.h> 
using namespace std;
char c[3005][3005];
int s[3005][3005],u,v,n,m,l[3005],r[3005];
bool f;
int calc(int x1,int y1,int x2,int y2)
{
    return s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];
}
void solve1()
{
    for(int i=1;i<=n;i++)
    {
        if(c[i][v]=='.'||c[i][v]=='S')
        {
            l[i]=r[i]=v;
            while(c[i][l[i]-1]=='.'||c[i][l[i]-1]=='S')
            {
                l[i]--;
            }
            while(c[i][r[i]+1]=='.'||c[i][r[i]+1]=='S')
            {
                r[i]++;
            }
        }
    }
    int x1=u;
    for(int x2=1;x2<x1;x2++)
    {
        if(c[x2][v]!='#')
        {
            bool f1=false,f2=false;
            int cnt=0;
            for(int y=max(l[x1],l[x2]);y<=min(r[x1],r[x2]);y++)
            {
                if(calc(x2,y,x1,y)==x1-x2+1)
                {
                    f1|=(y<=v);
                    f2|=(y>=v);
                    cnt++;
                    if(f1&&f2&&cnt>=2)
                    {
                    	f=true;
                    	break;
                    }
                }
            }
        }
    }
    for(int x2=x1+1;x2<=n;x2++)
    {
        if(c[x2][v]!='#')
        {
            bool f1=false,f2=false;
            int cnt=0;
            for(int y=max(l[x1],l[x2]);y<=min(r[x1],r[x2]);y++)
            {
                if(calc(x1,y,x2,y)==x2-x1+1)
                {
                    f1|=(y<=v);
                    f2|=(y>=v);
                    cnt++;
                    if(f1&&f2&&cnt>=2)
                    {
                    	f=true;
                    	break;
                    }
                }
            }
        }
    }
}
void solve2()
{
    for(int i=1;i<=m;i++)
    {
        if(c[u][i]=='.'||c[u][i]=='S')
        {
            l[i]=r[i]=u;
            while(c[l[i]-1][i]=='.'||c[l[i]-1][i]=='S')
            {
                l[i]--;
            }
            while(c[r[i]+1][i]=='.'||c[r[i]+1][i]=='S')
            {
                r[i]++;
            }
        }
    }
    int y1=v;
    for(int y2=1;y2<y1;y2++)
    {
        if(c[u][y2]!='#')
        {
            bool f1=false,f2=false;
            int cnt=0;
            for(int x=max(l[y1],l[y2]);x<=min(r[y1],r[y2]);x++)
            {
                if(calc(x,y2,x,y1)==y1-y2+1)
                {
                    f1|=(x<=u);
                    f2|=(x>=u);
                    cnt++;
                    if(f1&&f2&&cnt>=2)
                    {
                    	f=true;
                    	break;
                    }
                }
            }
        }
    }
    for(int y2=y1+1;y2<=m;y2++)
    {
        if(c[u][y2]!='#')
        {
            bool f1=false,f2=false;
            int cnt=0;
            for(int x=max(l[y1],l[y2]);x<=min(r[y1],r[y2]);x++)
            {
                if(calc(x,y1,x,y2)==y2-y1+1)
                {
                    f1|=(x<=u);
                    f2|=(x>=u);
                    cnt++;
                    if(f1&&f2&&cnt>=2)
                    {
                    	f=true;
                    	break;
                    }
                }
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>c[i][j];
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+(c[i][j]!='#');
            if(c[i][j]=='S')
            {
                u=i;
                v=j;
            }
        }
    }
    solve1();
    solve2();
    if(f==true)
    {
        cout<<"Yes"<<endl;
    }
    else
    {
        cout<<"No"<<endl;
    }
    return 0;
}
/*
(x1,y1) (x1,y2)
(x2,y1) (x2,y2)
*/

标签:cnt,int,矩阵,3005,&&,x2,y2
From: https://www.cnblogs.com/watersail/p/18370913

相关文章

  • 不同矩阵变换的特征值和特征向量对比,简洁明了的大表格!
    为了方便自己,也为了方便大家总结如图,毫无废话,原矩阵为A矩阵特征值特征向量----如有错误还请告知,觉得很对欢迎点赞!......
  • 力扣热题100_二分查找_74_搜索二维矩阵
    文章目录题目链接解题思路解题代码题目链接74.搜索二维矩阵给你一个满足下述两条属性的mxn整数矩阵:每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。给你一个整数target,如果target在矩阵中,返回true;否则,返回fa......
  • Leetcode 59.螺旋矩阵II
    力扣题目链接(opensnewwindow)**给定一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入:3输出:[[1,2,3],[8,9,4],[7,6,5]]思路这道题目可以说在面试中出现频率较高的题目,本题并不涉及到什么算法,就是......
  • 抖音企业员工矩阵号 - 评论和私信统一接待回复
    假如做抖音矩阵账号,有几十上百的账号想要统一接待回复私信和评论https://gofly.v1kf.com 基于抖音开放平台官方接口,授权接入有两种方式:登录注册页面,直接抖音扫码登入后台前往【菜单】【团队设置】【抖音接入】【扫码授权】,这个地方可以在一个客服账号下绑定多个抖音,方便......
  • 10倍加速LLM计算效率:消失的矩阵乘
    矩阵乘法(MatMul)是深度学习中的主要计算瓶颈,尤其在ChatGPT等Transformer模型中,矩阵乘法的运行时长约占其总运行时长的45-60%,解决这一挑战对发展更经济的大模型具有重要意义。为此,加州大学的研究人员在论文《ScalableMatMul-freeLanguageModeling(可扩展的无矩阵乘法语言模......
  • 小红书实战宝典:解锁爆款密码,从矩阵号到高效投放
    关键词:小红书营销,矩阵号策略,内容创造,数据分析目录:品牌矩阵号构建与管理视频教程:《商家矩阵号打法》产品形象塑造视频教程:《产品塑造》高质量内容生产视频教程:《内容制造》图文笔记发布技巧视频教程:《如何发图文笔记》短视频内容创作与优化视频教程:《短视频》......
  • 动态dp & 矩阵加速递推
    广义矩阵乘法我们定义两个矩阵\(A,B\)在广义矩阵乘法下的乘积为\(C\),其中\[C=\begin{bmatrix}\max\limits_{i=1}\limits^{m}A_{1,i}+B_{i,1}&\max\limits_{i=1}\limits^{m}A_{1,i}+B_{i,2}&\dots&\max\limits_{i=1}\limits^{m}A_{1,i}+B_{i,k}\\\......
  • 03-Matlab数组与矩阵
    数组的建立和操作数组算术运算数组信息获取矩阵的建立矩阵的扩展矩阵的块操作矩阵中元素的删除赋值为一对方括号矩阵的转置加点不转置为共轭复数没点的转置为共轭复数矩阵的旋转矩阵的翻转矩阵尺寸的改变矩阵加减法矩阵乘法矩阵除法矩阵中元素......
  • 矩阵和神经网络的优雅与力量-《Python神经网络编程》读后感
    《Python神经网络编程》是一本非常优秀的神经网络入门编程书,作者手把手从安装环境开始,每一行代码都是在树莓派上就能运行的,甚至可以说不需要什么第三方库,仅仅用了矩阵的优雅和力量,就能够在树莓派上顺利的运行。仅仅是这样简单的代码实现,就实现了神经网络的前馈信号计算、误差......
  • 矩阵加速线性递推
    前置:【模板】矩阵快速幂斐波那契数列定义\(Fib_i\)为斐波那契数列第\(i\)项,斐波那契数列定义如下\[Fib_n=\left\{\begin{aligned}1\space(n\le2)\\Fib_{n-1}+Fib_{n-2}\space(n\ge3)\end{aligned}\right.\]给定一个\(n\),求出\(Fib_n\mod10^9+7\)的值。......