城市游戏 (java)

因为数据较小没有用分治算法

有一天,小猫 rainbow 和 freda 来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。

这片土地被分成 N×MN×M 个格子,每个格子里写着 R 或者 FR 代表这块土地被赐予了 rainbow,F 代表这块土地被赐予了 freda。

现在 freda 要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着 F 并且面积最大。

但是 rainbow 和 freda 的 OI 水平都弱爆了,找不出这块土地,而蓝兔也想看 freda 卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为 SS,它们将给你 3×S3×S 两银子。

输入格式

第一行包括两个整数 N,MN,M,表示矩形土地有 NN 行 MM 列。

接下来 NN 行,每行 MM 个用空格隔开的字符 F 或 R,描述了矩形土地。

每行末尾没有多余空格。

输出格式

输出一个整数,表示你能得到多少银子,即(3×3×最大 F 矩形土地面积)的值。

数据范围

1≤N,M≤10001≤N,M≤1000

输入样例:

5 6
R F F F F F
F F F F F F
R R R F F F
F F F F F F
F F F F F F

输出样例:

45

代码解答 

 public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int daxiao=0;
        int N,M;
        N=in.nextInt();
        M=in.nextInt();
        String [][]fuz=new String[N][M];
        for(int i=0;i<N;++i){
            for(int j=0;j<M;j++){
                fuz[i][j]=in.next();
            }
        }
        for(int o=0;o<N*M;++o) {
            if (fuz[o/M][o%M].equals("R")){
                int panduan;
               //上
                        panduan=0;
                for(int y=0;y<o/M;++y){
                    for(int x=0;x<M;++x){
                        if(fuz[y][x].equals("R")){
                            panduan++;
                        }
                    }
                }
                if(panduan==0){
                    if((o/M)*M>daxiao){
                        daxiao=(o/M)*M;
                    }
                }
                //下
                panduan=0;
                for(int y=o/M+1;y<N;++y){
                    for(int x=0;x<M;++x){
                        if(fuz[y][x].equals("R")){
                            panduan++;
                        }
                    }
                }
                if(panduan==0){
                    if((N-((o/M)+1))*M>daxiao){
                        daxiao=(o/M)*M;
                    }
                }
                //左
                panduan=0;
                for(int x=0;x<o%M;++x){
                    for(int y=0;y<N;++y){
                        if(fuz[y][x].equals("R")){
                            panduan++;
                        }
                    }
                }
                if(panduan==0){
                    if(((o%M)-1)*N>daxiao){
                        daxiao=(o/M)*M;
                    }
                }
                //右
                        panduan=0;
                for(int x=o%M+1;x<M;++x){
                    for(int y=0;y<N;++y){
                        if(fuz[y][x].equals("R")){
                            panduan++;
                        }
                    }
                }
                if(panduan==0){
                    if((o%M+1)*N>daxiao){
                        daxiao=(o%M+1)*N;
                    }
                }
            }
        }
        System.out.println(daxiao*3);
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值