zoukankan      html  css  js  c++  java
  • # 单调栈 ——Acwing 152. 城市游戏

    152 城市游戏

    有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
    	
    这片土地被分成N*M个格子,每个格子里写着’R’或者’F’,R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。
    
    现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着’F’并且面积最大。
    但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为S,它们将给你3*S两银子。
    
    输入格式
    第一行包括两个整数N,M,表示矩形土地有N行M列。
    
    接下来N行,每行M个用空格隔开的字符’F’或’R’,描述了矩形土地。
    
    每行末尾没有多余空格。
    
    输出格式
    输出一个整数,表示你能得到多少银子,即(3*最大’F’矩形土地面积)的值。
    
    数据范围
    1≤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
    难度: 中等
    时/空限制: 1s / 64MB
    来源: 《算法竞赛进阶指南》
    
    #include<cstdio>
    #include<iostream>
    #include<stack>
    using namespace std;
    long long ans;
    int a[1010][1010];
    char c[1010][1010];
    struct node{
        int h,w;
    };
    int main(){
        int n,m;
    	scanf("%d%d",&n,&m);
            stack<node>s;
            ans=0;
            for(int i=1;i<=n;i++)
            	for(int j=1;j<=m;j++)
                {
                	cin>>c[i][j];
    				if(c[i][j]=='F') a[i][j]=a[i-1][j]+1;	
            	}
    	    for(int i=1;i<=n+1;i++)
    	    {
    	    	a[i][m+1]=0;
    	    	node tmp;
    	    	stack<node>s;
    	    	for(int j=1;j<=m+1;j++)
    			{
    	            if(s.empty()||a[i][j]>s.top().h)
    				{
    	                tmp.h=a[i][j];tmp.w=1;
    	                s.push(tmp);
    	            }
    				else
    				{
    	                int width=0;
    	                while(!s.empty()&&a[i][j]<=s.top().h)
    					{
    	                    width+=s.top().w;
    	                    ans=max(ans,(long long)width*s.top().h);
    	                    s.pop();
    	                }
    	                tmp.h=a[i][j];tmp.w=width+1;
    	                s.push(tmp);
    	            }
    	        }
    	    }
            printf("%lld
    ",3*ans);
        return 0;
    }
    
  • 相关阅读:
    Windows 设置自启动计划任务(非登录启动)
    C# 计算代码执行时间
    使用RabbitMQ做数据接收和处理时,自动关闭
    Winform 连接Web Service 记录
    【转】DataTable 中数据筛选
    更改数据库管理员sa账户密码
    数据库显示可疑的修复方法
    SQL SERVER 2008 删除某个数据库的所有连接进程
    数据库自动备份还原成新库脚本
    关于BindingSource 组件的一些用法
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026801.html
Copyright © 2011-2022 走看看