[BZOJ1127]-[POI2008]KUP-思维+极大子矩形

本文探讨了一种算法,用于解决在一个给定的大规模矩阵中寻找满足特定条件的子矩形的问题。该算法通过排除“坏点”并逐步调整子矩形边界来找到满足条件的子矩形权值和。

说在前面

这 zi 题 ji 真 zhen 厉 cai 害 ji


题目

给出一个 nnn∗n 的矩阵 aa 以及一个常数 K,询问是否有一个子矩形满足:K2KK≤子矩形权值和≤2∗K,如果有,输出这个子矩形的左上角以及右下角坐标,先列后行
范围:n2000n≤2000ai,j2109ai,j≤2∗109K109K≤109

输入输出格式

输入格式:
第一行两个整数 K,nK,n
接下来是一个 nnn 列的数字矩阵

输出格式:
如题目中所述,若不存在则输出 NIE


解法

考虑这个问题的一维版本:
首先如果有一个单独的格子满足条件,直接特判就好
然后就是询问是否有一个子串满足条件。显然这个子串不能包含任意一个大于 2K2K 的数字,我们把这样的数字称为「坏点」。假如我们找到了一个不包含坏点的极长子串,如果这个子串的和满足条件就直接输出;不然,因为其中所有数字都小于 KK,我们只需要在两端任意去掉一些数字,一定能获得一个合法的区间

同理推广到二维即可
真厉害


下面是代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;

int N , K , K2 , up[2005] ;
bool ban[2005][2005] ;
long long sa[2005][2005] ;

inline bool legal( int x ){ return x >= K && x <= K2 ; }
inline long long sum( int lf , int rg , int up , int dn ){
    return sa[dn][rg] - sa[dn][lf-1] - sa[up-1][rg] + sa[up-1][lf-1] ;
}

void cal( int lf , int rg , int up , int dn ){
    if( sum( lf , rg , up , dn ) < K ) return ;
    while( true ){
        if( legal( sum( lf , rg , up , dn ) ) )
            printf( "%d %d %d %d" , lf , up , rg , dn ) , exit( 0 ) ;
        if( up != dn ){
            if( sum( lf , rg , up , up ) <= K ) up ++ ;
            else dn -- ;
        } else if( lf != rg ) {
            if( sum( lf , lf , up , dn ) <= K ) lf ++ ;
            else rg -- ;
        } else return ;
    }
}

int s[2005] , top ;
void solve(){
    for( int i = 1 ; i <= N ; i ++ ){
        for( int j = 1 ; j <= N ; j ++ )
            up[j] = ( ban[i][j] ? 0 : up[j] + 1 ) ;
        for( int j = 1 ; j <= N + 1 ; j ++ ){ // N + 1 ---> push_empty
            while( top && up[ s[top] ] >= up[j] ){
                cal( s[top-1] + 1 , j - 1 , i - up[ s[top] ] + 1 , i ) ;
                top -- ;
            } s[++top] = j ;
        } top = 0 ;
    } puts( "NIE" ) ;
}

int main(){
    scanf( "%d%d" , &K , &N ) ; K2 = K << 1 ;
    for( int i = 1 ; i <= N ; i ++ )
    for( int j = 1 ; j <= N ; j ++ ){
        scanf( "%lld" , &sa[i][j] ) ;
        if( legal( sa[i][j] ) )
            printf( "%d %d %d %d" , j , i , j , i ) , exit( 0 ) ;
        if( sa[i][j] > K2 ) ban[i][j] = true ;
        sa[i][j] += sa[i-1][j] + sa[i][j-1] - sa[i-1][j-1] ;
    } solve() ;
}
内容概要:本文针对传统三电平并网逆变器在谐波抑制、电网不平衡适应性及动态响应方面的不足,提出一种基于有源中点箝位(ANPC)三电平拓扑的高性能并网控制策略。该策略深度融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术与电网电压前馈控制,构建了“精准同步—扰动补偿—优质调制”三位一体的一体化控制体系。依托ANPC拓扑在开关损耗均衡、中点电位稳定和低谐波输出方面的硬件优势,结合DPWMA调制提升等效开关频率、正负序分离实现不平衡电网下的精确锁相、前馈控制克服闭环滞后等先进控制手段,显著改善了系统的稳态电能质量、动态响应速度与复杂工况适应能力。通过多工况仿真验证,该复合策略在稳态运行时可大幅降低总谐波畸变率,在电网不平衡与动态扰动工况下仍能维持并网电流对称、功率平稳及快速恢复能力,展现出优异的综合性能与工程应用潜力。; 适合人群:具备电力电子与电力系统基础知识,从事新能源并网、逆变器控制、微电网或相关领域研究的研发人员及研究生。; 使用场景及目标:① 提升高功率并网逆变器的电能质量与运行稳定性;② 解决电网电压不平衡、畸变等复杂工况下的并网难题;③ 优化动态响应性能,提升系统抗扰能力;④ 为ANPC拓扑与先进控制策略的工程化应用提供技术参考。; 阅读建议:建议结合仿真模型深入理解DPWMA调制、正负序分离锁相与前馈控制的实现细节,重点关注多工况下的性能对比分析,以掌握复合控制策略的设计逻辑与优化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值