首页 > 其他分享 >题解:SP6517 JOCHEF - Farmer Sepp

题解:SP6517 JOCHEF - Farmer Sepp

时间:2024-10-09 15:14:08浏览次数:5  
标签:int 题解 位置 cin 延伸 数组 Farmer Sepp

一眼简单悬线法,而且有多倍经验,感觉这题被遗忘了,那我就拿下这个水紫吧!

我们用 a 数组表示能向上延伸能到达的最大距离,依次遍历每一行,如果该位置为 F,他可以从上一行转移过来,将a数组增加一,如果该位置为 C,意味着这个位置不能成矩形,将 a 数组变为 0。

接下来进行悬线法的标准操作,设 l 数组为能向左延伸到不低于此位置的高度的最远位置,然后进行推导。

  • 当 \(i=1\),到达边界停止。

  • 当 \(a[i]>a[i-1]\),低于高度,停止拓展。

  • 当 \(a[i]<=a[i-1]\),可以扩展,直接继承 \(l[i]=l[l[i]-1]\)。

r 数组则是向右延伸,相同方法赋值即可,最后统计答案直接将高度乘上可延伸的长度,结果取最大值一气呵成。

运行过程类似下图(其他题的图片但同一个意思)。

image

注意这题有多组数据,换行与多测清空都要注意。

上代码!!!

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e4+10;
#define int ll
int n,m,k;
int a[N];
int l[N],r[N];
int ans;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    while(1){
    	cin>>n>>m;
    	
    	if(n==m&&n==0){
    		break;
		}
		ans=0;
		memset(a,0,sizeof a);
		cin>>k;
	    for(int i=1;i<=n;i++){
	    	for(int j=1;j<=m;j++){
	    		l[j]=r[j]=j;
			}
			char c;
			for(int j=1;j<=m;j++){
				cin>>c;
				if(c=='C'){
					a[j]=0;
				}
				else if(c=='H'){
					a[j]++;
				}
			}
			for(int j=1;j<=m;j++){
				while(l[j]!=1&&a[j]<=a[l[j]-1]){
					l[j]=l[l[j]-1];
				}
			}
			for(int j=m;j>=1;j--){
				while(r[j]!=m&&a[j]<=a[r[j]+1]){
					r[j]=r[r[j]+1];
				}
			}
			for(int j=1;j<=m;j++){
				ans=max(ans,a[j]*(r[j]-l[j]+1));
			}
		}
	    cout<<(ll)ans*k<<"\n";
	}
    return 0;
}

标签:int,题解,位置,cin,延伸,数组,Farmer,Sepp
From: https://www.cnblogs.com/sadlin/p/18454229

相关文章

  • 使用宝塔快速搭建配置Openai api接口代理+502 Bad Gateway网关错误问题解决
    本教程提供了一种简便快捷的方法,无需复杂步骤,极易操作,实现零代码、零部署的快速接入。实现准备1.服务器,这里使用阿里香港轻量服务器)2.OpenAI官方的模型apikey3.使用第三方系统或插件进行测试关于第三方网站系统或插件:《SparkAI系统介绍文档-渐进式AIGC系统》开......
  • P10673 【MX-S1-T2】催化剂 题解
    要解决这个问题,我们需要高效地处理动态更新的糖果种类数量,并在每次询问时快速计算最小的愤怒值总和。以下是详细的解决方案和实现步骤:问题分析糖果的种类和数量:每个糖果有一个类型,代表不同的种类。我们需要跟踪每种类型的糖果数量,以便在分配时计算重复的糖果数量,从而确定愤......
  • AT_abc374_c [ABC374C] Separated Lunch 题解
    题目传送门右侧可以传送到原题位置。题目大意题目描述由于KEYENCE总部的员工越来越多,他们决定将总部各部门分成两组,错开午休时间。KEYENCE总部有NNN个部门,第......
  • 弹珠 题解
    题意求\(n\)个一样的球放到\(k\)个盘子里的方案数(每个盘子至少一个)。题解考虑记\(f(i,j)\)为结果。我们可以一次性只加一个球(新放到一个盘子里),也就是可以从\(f(i-1,j-1)\)转移过来。也可以用已有的盘子每个盘子放一个球,就是从\(f(i-j,j)\)转移过来。为......
  • [AGC064D] Red and Blue Chips 题解
    Description你有\(N\)个字符串,初始情况下每个字符串只有一个字符,是\(\texttt{R}\)或\(\texttt{B}\),保证第\(N\)个字符串是\(\texttt{B}\)。你需要对每个\(i=1,2,\cdots,n-1\)执行以下操作:选择一个整数\(j\)使得\(i<j\len\),且第\(j\)个字符串的最后一个字符......
  • AT_jsc2021_h Shipping 题解
    不算难的一道题。思路考虑原图是一个基环树。首先在树上部分的路径是固定的,我们没有办法抉择。唯一需要考虑的是在环上的那一部分。在环上我们每一个路径有两种选择。如何考虑到所有情况。我们每一次断掉环上的一条边。这样每一个路径就变成固定的了。我们只需要快速计算......
  • Hetao P1031 萌萌题 题解 [ 蓝 ] [ 线性 dp ]
    萌萌题:一道结合了观察性质的线性dp。观察我们先考虑极端情况:所有数相同,所有数降序排列两种情况。对于所有数相同的情况,我们发现,最终可以合并出来的区间,最多只有\(n\logn\)个。怎么证明?考虑固定右端点,那么我们想要合并出一个点,就得选\(2^k\)个数出来,这就有\(\logn\)......
  • [AGC064C] Erase and Divide Game 题解
    DescriptionTakahashi和Aoki玩游戏。先在黑板上写若干个数,由\(N\)个互不相交的区间\([l_i,r_i]\)组成。两人轮流操作,每次操作先删去所有的奇数/偶数,再把剩下的数除以\(2\)(向下取整),无法操作的人输。Takahashi先手,假设两人都采用最优策略,问谁能获胜。\(1\leqN\leq10^......
  • 移动端window.open跳转链接时,iOS没有反应的问题解决
    问题描述:使用window.open跳转链接时安卓可以正常跳转,但是iOS苹果上没有反应问题原因:用户交互限制iOS对于window.open的调用有严格的用户交互要求。如果window.open不是在用户交互(如点击事件)的上下文中调用的,可能会被浏览器阻止。弹出窗口拦截某些浏览器可能会默认......
  • 士兵训练 题解
    题意link.题解正解会RE几个点,是官方的栈空间太小了。再者网上几篇题解都被我hack了,好不容易找到一组hack却不是我错了,而是STD错了……所以我来写篇题解造福社会。观察到\(\max\{b_i\bmodb_j\}\),则得到的结果一定比最大值小,则最大能取到次大。那就维护一个子树......