zoukankan      html  css  js  c++  java
  • 2015 EC L

    /*************************************************************************
        > 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;
    }
  • 相关阅读:
    学习方法
    仿知乎Android端回答UI
    【LeetCode】:二叉树的Max,Min深度
    LeetCode:二叉树的前、中、后序遍历
    Caffe学习系列(四)之--训练自己的模型
    后端开发--之文件上传
    Python——轻量级web服务器flask的学习
    Django 部署(Apache下)
    Caffe学习系列(三)Docker安装及一些问题的记录
    Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/7966588.html
Copyright © 2011-2022 走看看