首页 > 其他分享 >G. GCD on a grid

G. GCD on a grid

时间:2024-04-10 16:58:08浏览次数:22  
标签:GCD int gcd len vis grid 整除 105

原题链接

题解

  1. \(gcd\) 一定能被 \(a[1][1],a[n][m]\) 整除
    2.\(gcd\) 能被通过的路径上所有元素整除
    由此分析:遍历 \([1,\sqrt{gcd(a[1][1],a[n][m])}]\) 判断能否通过(被路径上所有元素整除)

我还在思考是广搜还是深搜,由于起点终点已知,求是否存在该路径,所以深搜

有一个逆天优化请看代码

code

#include<bits/stdc++.h>
using namespace std;

int a[105][105];
int vis[105][105]={0};
int n,m;
int dfs(int len,int x,int y)
{
    vis[x][y]=len;//代表gcd=len时走到过这里,太巧妙了!!
    if(a[x][y]%len!=0) return 0;
    if(x==n&&y==m) return 1;
    int ans=0;
    if(y+1<=m&&vis[x][y+1]!=len) ans|=dfs(len,x,y+1);
    if(x+1<=n&&vis[x+1][y]!=len) ans|=dfs(len,x+1,y);

    return ans;
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n>>m;

        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cin>>a[i][j];
            }
        }

        int maxs=__gcd(a[1][1],a[n][m]),ans=1;
        for(int k=1;k*k<=maxs;k++)
        {
            if(maxs%k==0)
            {
                if(dfs(maxs/k,1,1))
                {
                    ans=maxs/k;
                    break;
                }
                else
                {
                    if(dfs(k,1,1)) ans=k;
                }
            }
        }
        cout<<ans<<endl;
        memset(vis,0,sizeof vis);//但是每个测试用例用完还是要清零,不然下一回合遇到时会退出
    }
    return 0;
}

标签:GCD,int,gcd,len,vis,grid,整除,105
From: https://www.cnblogs.com/pure4knowledge/p/18126374

相关文章

  • 布局升级秘籍:掌握CSS Grid网格布局,打造响应式网页设计
    随着现代网页设计的不断演进,传统的布局方式已经逐渐不能满足设计师和开发者们对于高效、灵活且强大布局系统的追求。而CSSGrid网格布局,正是在这样的背景下应运而生的。今天,我们就来深入探讨CSSGrid布局的魅力所在,带你解锁这项强大的设计工具,让网页布局变得更加简单和高效。......
  • DataGridView 头部行高自动适应文本
    C#WinformDataGridView头部行高自动适应文本//头部行高自动适应DGV.ColumnWidthChanged+=DGV_ColumnWidthChanged;///<summary>///DataGridView头部行高自动适应文本///</summary>///<paramna......
  • WPF datagrid mvvm multi select via customize datagrid
    usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;namespaceWpfApp39{publicclassMultiSelectDataGrid:D......
  • QFComponent for lazarus增加新控件TQFGridPanelComponent
    TQFGridPanelComponent控件支持在单元格绑定可视控件,运行时单元格绑定的控件会吸附到相应的单元格里。|姓名|[#][C2]单位|办公地址|备注||:-:|:-:|:-:|:-:||秋风6|[bm4]检测中心1|南山建工村1|||秋风7|检测中心2|<COMPNAME=name3>[#][c4]南山建工村2|||[c2]地址|<COMPNAME=n......
  • unistringgrid 下拉框
    unistringgrid下拉框在Delphi中,TUniStringGrid是一个用于显示文本的网格控件,它可以包含下拉框。为了在TUniStringGrid中实现下拉框,你可以使用TUniComboBox控件作为编辑控制。以下是一个简单的例子,展示如何在TUniStringGrid中添加下拉框:procedureTForm1.AddComboBoxToU......
  • StringGrid 常用操作
    StringGrid组件用于建立显示字符串的网格,与电子表格相似。它可使表格中的字符串和相关对象操作简单化。StringGrid组件提供了许多可控制网格外观念的属性,以及利用表格的结构响应用户操作的事件和方法。StringGrid具有关联对象与网格中的每个字符串的作用,这些对象为用户封装了......
  • UniStringGrid 表格编辑
    UniStringGrid+表格编辑UniStringGrid是一个用于显示文本的组件,通常用于Delphi的Unicode版本。如果您想要实现UniStringGrid与编辑功能的结合,您可以通过设置UniStringGrid的EditorMode属性来启用编辑功能。以下是一个简单的例子,展示如何在UniStringGrid中启用编辑......
  • UniStringGrid+列只读
    UniStringGrid+列只读在Delphi中,TUniStringGrid是一个用于显示文本的网格控件,它是TStringGrid的Unicode版本。如果你想让TUniStringGrid中的某些列为只读,你可以通过设置Options属性中的goEditing选项来实现。具体来说,你可以通过设置TUniStringGrid.Options的goE......
  • UniStringGrid 选择行
    UniStringGrid选择行UniStringGrid是一个用于显示文本的控件,通常用于Delphi的Unicode版本。要在UniStringGrid中选择行,你可以通过设置Grid.Selection属性来实现。以下是一个简单的例子,展示了如何在UniStringGrid中选择一行:procedureTForm1.SelectRow(Grid:TUniSt......
  • 欧几里得算法求解GCD
    GCD(最大公约数)欧几里得算法(辗转相除法)原理if(a%b==0)GCD=belseGCD=b%(a%b)基本情况:如果其中一个数为0,则另一个非零数一定就是两数的GC......