首页 > 其他分享 >ABC 311

ABC 311

时间:2024-02-08 18:44:05浏览次数:42  
标签:ABC 右上角 311 len 正方形 边长 无洞 dp

前四题过水

E

枚举正方形的上边界所在行。对于第 \(i\) 行一个没洞的位置 \((i,j)\),我们尝试求出以它为右上角的无洞正方形个数。

结论:设以 \((i,j-1)\) 为右上角的无洞正方形边长最大为 \(len\),那以 \((i,j)\) 为右上角的无洞正方形边长最大为 \(len + 1\)。

以 \((i,j)\) 为右上角的边长为 \(len+2\) 的无洞正方形包含了以 \((i,j-1)\) 为右上角的边长为 \(len+1\) 的无洞正方形,矛盾。

而以 \((i,j)\) 为右上角边长能为 \(len+1\) 的充要条件是:

  1. \((i,j)\) 往下 \(len+1\) 个格子都无洞;

  2. \((i,j+len)\) 往左 \(len+1\) 个格子都无洞。

预先记录 \(lft[i][j],dwn[i][j]\) 表示从 \((i,j)\) 往左/下第一次碰到洞是什么地方。\(O(n^2)\) 预处理。

另外,如果 \((i,j)\) 不能达到 \(len+1\),那边长最大为 \(dwn[i][j]-i+1.\)

然后可以扫一遍行,每行找所有无洞的位置,每个位置 \(ans+=\) 这个位置右上角的最大边长。

\(O(n^2)\)。

(官方发的题解貌似是 dp,\(dp[i][j]\) 表示以 \((i,j)\) 为右下角的无洞正方形个数)

F

有一个矩阵,一些格子已经被染成黑色。你可以把剩下的格子任意选一些染成黑色。有多少种染色方案使得每个黑格 \((i,j)\),\((i+1,j)\) 和 \((i+1,j+1)\) 都是黑格?

\(dp[i][j]\) 表示前 \(i\) 列,第 \(i\) 列最高黑格位置是第 \(j\) 行的方案数。

容易发现 \(dp[i-1][j+2\sim n]\) 不能转移到 \(dp[i][j]\),其他 \(dp[i - 1][]\) 都可以。

同时注意 \(dp[i][j]\) 的 \(j\ge\) 第 \(i\) 列的最高黑格高度。

然后就是正常转移,加上前缀和优化

G

找出矩形使得(矩阵和 \(\times\) 矩阵最小值)最大。

直接暴力枚举最小值,然后使用悬线法

标签:ABC,右上角,311,len,正方形,边长,无洞,dp
From: https://www.cnblogs.com/FLY-lai/p/18012021

相关文章

  • [ABC327G] Many Good Tuple Problems 题解
    Description对于一对长度均为\(M\)且元素值在\(\left[1,N\right]\)之间的序列\((S,T)\),定义其为好的当且仅当:存在一个长度为\(N\)的\(01\)序列\(X\),使得其满足如下条件:对于任意\(i\in\left[1,M\right]\),有\(X_{S_i}\neqX_{T_i}\)。给定\(N,M\),求在......
  • AT_abc270_g [ABC270G] Sequence in mod P 题解
    题目传送门前置知识大步小步算法解法递推式为\(x_{n}=(ax_{n-1}+b)\bmodp\),发现可以统一消去\(\bmodp\),只在最后参与计算。以下过程省去模运算。当\(x_{0}=t\)时,则\(n=0\)即为所求。当\(a=0,x_{0}\net\)时,递推式转化为\(x_{n}=b\bmodp\)。若\(b=t\),则......
  • AtCoder-ABC-Ex乱写
    ABC233ExManhattanChristmasTree先将\((x,y)\)变成\((x+y,x-y)\),也就是曼哈顿转切比雪夫,之后曼哈顿距离\(\lek\)的在切比雪夫坐标系下就是一个正方形。用主席树做矩形和,外层套一个二分即可,时间复杂度\(\mathcal{O}(n\log^2n)\)。ABC233Ex#include<bits/stdc++.h......
  • 【多线程例题】使用三个线程,分别可以打印A,B,C。要求实现三个线程协同打印,顺序打印出ABC
    顺序打印-进阶版方法一:三个线程竞争同一个锁,通过count判断是否打印三个线程分别打印A,B,C方法一:通过count计数打印(三个线程上同样的锁,打印一个,召唤所有锁,如果不满足条件,则wait等待,锁自动解锁)方法二:/***有三个线程,分别只能打印A,B和C*要求按顺序打印ABC,打印10次*输出示......
  • ABC335 A~E 题解
    A题目大意输入一个字符串,把这个字符串的最后一位改成4后输出这个字符串。解题思路直接模拟即可AC代码#include<iostream>#include<math.h>#include<time.h>#include<stdio.h>#include<algorithm>#definelllonglonginlinevoidwork(){std::strings;s......
  • ABC240Ex Sequence of Substrings
    题意简述有长度为\(n\)的01串,你现在要选出\(k\)个两两无交子串,使得将\(k\)个子串按照出现位置排序后,后者的字典序严格比前者大。最大化\(k\)。\(\bm{n\le2\times10^4}\)。分析首先的首先观察数据范围可知此题应该是个线性根号对数的时间复杂度首先有个显然的\(O(n......
  • 按大小顺序依次输出abc的值
    include<stdio.h>intmain(){inta,b,c;printf("请输入三个整数:");scanf("%d%d%d",&a,&b,&c);if(a>b&&a>c){if(b>c){printf("从大到小输出三个数:%d%d%d",a,b,c);}else{printf("从大到小输出三个数:%d%d%d&q......
  • [ABC238F] Two Exams 题解
    题目链接题意有\(N\)个人,有两个\(1\simN\)排列\(P,Q\),在其中选择\(K\)个数,要满足:如果\(P_x<P_y\)且\(Q_x<Q_y\)则不能选了\(y\)而不选\(x\)。思路首先按照\(P\)从小到大排序,这样的话只用考虑\(Q\)。设\(f_{i,j,k}\)表示从前\(i\)个数中选\(j\)个,其中......
  • abc339 详解
    第一篇整场题解纪念我第一次AK的abc!A从后往前找到第一个'.'然后输出'.'到字符串结尾构成的字符串。#include<iostream>usingnamespacestd;intmain(intargc,constchar*argv[]){stringstr;cin>>str;intlen=(int)str.length();stri......
  • ABC339 F Product Equality 题解
    QuestionABC339FProductEquality给出一个序列\(A_1,A_2,\cdots,A_N\)计算数对\((i,j,k)\)满足\(A_i\timesA_j=A_k\)的个数\(A_i\le10^{1000}\)Solution思考\(A_i\)比较小的情况如果\(A_i\le1e9\)的,暴力枚举\(i,j\)然后用\(map\)查找\(A_i\timesA_j......