码迷,mamicode.com
首页 > 其他好文 > 详细

2015 EC L - Multiplication Table

时间:2017-12-03 18:11:21      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:题意   pre   cheng   cat   map   []   return   c++   暴力   

/*************************************************************************
    > 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

标签:题意   pre   cheng   cat   map   []   return   c++   暴力   

原文地址:http://www.cnblogs.com/wuwangchuxin0924/p/7966588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!