双指针模板
Posted 猪八戒1.0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双指针模板相关的知识,希望对你有一定的参考价值。
for (int i = 0, j = 0; i < n; i ++ )
while (j < i && check(i, j)) j ++ ;
// 具体问题的逻辑
统计子矩阵https://www.lanqiao.cn/problems/2109/learning/
视频讲解
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main
static int N=510;
static long a[][]=new long[N][N];
static long s[][]=new long[N][N];
static long ans=0;
static long k;
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException
String [] ts=br.readLine().split(" ");
int n=Integer.parseInt(ts[0]);
int m=Integer.parseInt(ts[1]);
k=Integer.parseInt(ts[2]);
for(int i=1;i<=n;i++)
ts=br.readLine().split(" ");
for(int j=1;j<=m;j++)
a[i][j]=Integer.parseInt(ts[j-1]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
for(int x1=1;x1<=n;x1++)
for(int x2=x1;x2<=n;x2++)
for(int i=1,j=1;i<=m;i++)
while(j<=i&&!check(x1,j,x2,i))
j++;
ans+=(i-j+1);
System.out.println(ans);
private static boolean check(int x1, int j, int x2, int i)
long num=s[x2][i]-s[x1-1][i]-s[x2][j-1]+s[x1-1][j-1];
return num<=k;
以上是关于双指针模板的主要内容,如果未能解决你的问题,请参考以下文章