2015 EC L - Multiplication Table

Posted 勿忘初心0924

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2015 EC L - Multiplication Table相关的知识,希望对你有一定的参考价值。

/*************************************************************************
    > File Name: L.cpp
    > Author: LyuCheng
    > Created Time: 2017-12-03 17:31
    > Description: 
        题意:首先有一个乘法表,然后给你一个n*m的矩阵,里面有不确定的数,然
            后问你,这个表可不可能是乘法表的一部分

        思路:暴力判断每个点
 ************************************************************************/

#include <bits/stdc++.h>

#define MAXN 1234
#define MAXM 12
#define LL long long

using namespace std;

struct Point{
    int x,y;
    LL val;
    Point(){}
    Point(int _x,int _y,LL _val){
        x=_x;
        y=_y;
        val=_val;
    }
};

int t;
int n,m;
LL mapn[MAXN][MAXN];
char str[MAXM];
bool flag;
vector<Point>P;

inline LL cal(char str[]){
    int len=strlen(str);
    LL s=0;
    for(int i=0;i<len;i++){
        s*=10;
        s+=str[i]-0;
    }
    return s;
}

inline bool judge(LL x,LL y,LL fx,LL fy){
    for(int i=1;i<(int)P.size();i++){
        if((fx+P[i].x-x)*(fy+P[i].y-y)!=P[i].val)
            return false;
    }
    return true;    
}

inline void init(){
    P.clear();
    flag=false;
}

int main(){
//    freopen("in.txt","r",stdin);
    scanf("%d",&t);
    for(int ca=1;ca<=t;ca++){
        printf("Case #%d: ",ca);
        init();
        scanf("%d%d",&n,&m);
        for(LL i=1;i<=n;i++){
            for(LL j=1;j<=m;j++){
                scanf("%s",str);
                if(str[0]!=?){
                    mapn[i][j]=cal(str);
                    P.push_back(Point(i,j,mapn[i][j]));
                }else{
                    mapn[i][j]=0;
                }
            }
        }    
        if((int)P.size()==0){
            puts("Yes");
        }else {
            for(LL i=1;i*i<=P[0].val;i++){
                if(P[0].val%i==0){
                    LL fx=i;
                    LL fy=P[0].val/i;
                    if(fx>=P[0].x&&fy>=P[0].y)        
                    if(judge(P[0].x,P[0].y,fx,fy)==true){
                        flag=true;
                        break;
                    }        
                    swap(fx,fy);
                    if(fx>=P[0].x&&fy>=P[0].y)
                    if(judge(P[0].x,P[0].y,fx,fy)==true){
                        flag=true;
                        break;
                    }
                }
            }
            puts(flag==true?"Yes":"No");
        }    
    }
    return 0;
}

 

以上是关于2015 EC L - Multiplication Table的主要内容,如果未能解决你的问题,请参考以下文章

open方案openCPU-EC600L610设计应用总结

Gym 101194L / UVALive 7908 - World Cup - [三进制状压暴力枚举][2016 EC-Final Problem L]

在 AWS ec2 上安装 ejabberd

为啥调整根 EBS 卷大小后 EC2 实例无法正确启动?

通过用户数据在 EC2 实例上安装 CodeDeploy 代理

EC2安全组源/目标控制