zoukankan      html  css  js  c++  java
  • BZOJ3039: 玉蟾宫&wikioi2491 玉蟾宫

    3039: 玉蟾宫

    Time Limit: 2 Sec  Memory Limit: 128 MB
    Submit: 430  Solved: 265
    [Submit][Status]

    Description

    有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
    这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。
    现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着'F'并且面积最大。
    但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为S,它们每人给你S两银子。

    Input

    第一行两个整数N,M,表示矩形土地有N行M列。
    接下来N行,每行M个用空格隔开的字符'F'或'R',描述了矩形土地。

    Output

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

    Sample Input

    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

    Sample Output

    45

    HINT



    对于50%的数据,1<=N,M<=200

    对于100%的数据,1<=N,M<=1000

    Source

    题解:
    这方法叫悬线法?学习了
    蒟蒻不会一次单调栈求左右最远能扩展到哪儿,只能来两次了。。。
    代码:
     1 uses math;
     2 const maxn=1000+100;
     3 var s:ansistring;
     4     a:array[0..maxn,0..maxn] of char;
     5     h,l,r,sta:array[0..maxn] of longint;
     6     n,m,i,j,k,ans,top:longint;
     7 procedure init;
     8  begin
     9    readln(n,m);
    10    for i:=1 to n do
    11     begin
    12       k:=0;
    13       readln(s);
    14       for j:=1 to length(s) do
    15        if s[j]<>' ' then begin inc(k);a[i,k]:=s[j];end;
    16     end;
    17  end;
    18 procedure main;
    19  begin
    20    h[0]:=-1;h[m+1]:=-1;
    21    for i:=1 to n do
    22     begin
    23      for j:=1 to m do if a[i,j]='F'  then inc(h[j]) else h[j]:=0;
    24      top:=0;
    25      for j:=1 to m+1 do
    26       begin
    27       while (top>0) and (h[j]<h[sta[top]]) do
    28        begin
    29        r[sta[top]]:=j-1;dec(top);
    30        end;
    31       inc(top);sta[top]:=j;
    32       end;
    33      top:=0;
    34      for j:=m downto 0 do
    35       begin
    36       while (top>0) and (h[j]<h[sta[top]]) do
    37        begin
    38        l[sta[top]]:=j+1;dec(top);
    39        end;
    40       inc(top);sta[top]:=j;
    41       end;
    42      for j:=1 to m do ans:=max(ans,h[j]*(r[j]-l[j]+1));
    43     end;
    44  writeln(3*ans);
    45  end;
    46 
    47 begin
    48   assign(input,'input.txt');assign(output,'output.txt');
    49   reset(input);rewrite(output);
    50   init;
    51   main;
    52   close(input);close(output);
    53 end.  
    View Code
  • 相关阅读:
    underscore.js,jquery.js源码阅读
    css3动画知识点
    ajax防止重复提交
    jquery data属性的使用
    文字换行
    vue的生命周期
    iphone与安卓的兼容性问题汇总
    python 上下文管理器
    form 校验
    常用的字段和字段参数
  • 原文地址:https://www.cnblogs.com/zyfzyf/p/3905049.html
Copyright © 2011-2022 走看看