3月17日ACwing每日一题

1230. K倍区间 - AcWing题库

cpp 复制代码
//超时写法 需要优化
//两个1e5嵌套 变成1e10了>1e8需要优化
#include <bits/stdc++.h>
using namespace std;
const int N=100007;
int a[N];
int main(){
	int  n,k;cin>>n>>k;
	for(int i=1;i<=n;i++){
	cin>>a[i];
	a[i]+=a[i-1]; 
}
    int cnt=0;
    for(int i=0;i<=n;i++){
    	for(int j=i+1;j<=n;j++){
    		int sum=a[j]-a[i];
    		if(sum%k==0)cnt++;
		}
	}
	cout<<cnt;
	return 0;
} 
cpp 复制代码
//优化:空间换时间
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=100007;
int a[N];
int cnt[N];//开一个cnt数组 cnt[i]表示的是截止到目前为止余数是i的数有多少个
signed main(){
	int  n,k;cin>>n>>k;
	for(int i=1;i<=n;i++){
	cin>>a[i];
	a[i]+=a[i-1]; 
}
    int ans=0;
    for(int r=0;r<=n;r++){//枚举右端点
      ans+=cnt[a[r]%k];//前面余数为a[r]%k的cnt[a[r]%k]个数都能做左端点
      cnt[a[r]%k]++;//加上自身
      
    }
    cout<<ans;
	return 0;
} 

796. 子矩阵的和 - AcWing题库

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N=1007;
//二维前缀和:预处理要与a[i][j]相关联
//预处理:s[i][j]=s[i-1][j]+s[i][j-1]+a[i][j]-s[i-1][j-1]  -重复 
//实现:(x1,y1)以左上角 (x2,y2)为右上角
//实现:  s[x2[y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1][y2]      +重复

//一维差分: 预处理b[i]=a[i]-a[i-1]    b[i]改变后面的数都改 
//二维差分:
//预处理: 
//void insert(int x1,int y1,int x2,int y2){               +重复 
//b[x1][y1]+=c;
//b[x2+1][y1]-=c;
//b[x1][y2+1]-=c;
//b[x2][y2]+=c;
//实现:
//b[i[j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1]               -重复 
int a[N][N];
int pre[N][N];
int main(){
	int n,m,q;cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		pre[i][j]=pre[i-1][j]+pre[i][j-1]+a[i][j]-pre[i-1][j-1];
		}
	}
	while(q--){
		int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;
		cout<<pre[x2][y2]-pre[x1-1][y2]-pre[x2][y1-1]+pre[x1-1][y1-1]<<'\n';
	}
	return 0;
} 

4405. 统计子矩阵 - AcWing题库

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N=1007;

int a[N][N];
int pre[N][N];
int main(){
	int n,m,k;cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			pre[i][j]=pre[i-1][j]+pre[i][j-1]+a[i][j]-pre[i-1][j-1];
		}
	}
	int cnt=0;
	for(int x1=1;x1<=n;x1++){
		for(int y1=1;y1<=m;y1++){
			for(int x2=x1;x2<=n;x2++){
				for(int y2=y1;y2<=m;y2++){
					int res=pre[x2][y2]-pre[x1-1][y2]-pre[x2][y1-1]+pre[x1-1][y1-1];
					if(res<=k)cnt++;
				}
			}
		}
	} 
	cout<<cnt;
	return 0;
} 
cpp 复制代码
#include<iostream>
using namespace std;

typedef long long ll;
const int N = 5e2+3;
int n, m, k;
int a[N][N];


int main(){
    ios::sync_with_stdio(false);
    cin >> n >> m >> k;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            cin >> a[i][j];
            a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
        }
    }

    ll ans = 0;
    for(int i=1; i<=m; i++){
        for(int j=i; j<=m; j++){
            for(int s = 1, t = 1; t <= n; t ++ ){//s是慢指针 t是快指针 
                while(s <= t && a[t][j] - a[s - 1][j] - a[t][i - 1] + a[s - 1][i - 1] > k) s ++ ;
                if(s <= t) ans += t - s + 1;
            }
        }
    }

    cout << ans << '\n';
}
cpp 复制代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1007;

int a[N][N];
int pre[N][N];
int cnt=0;
signed main(){
	int n,m,k;cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			a[i][j]+=a[i-1][j];//每一列进行前缀和了
		}
	}
// 	for(int i=1;i<=n;i++){//左边界
// 	  for(int j=i;j<=m;j++){//右边界
// 	    for(int s=1,f=1;f<=n;f++){//快慢指针
	      
// 	    }
// 	  }
// 	}
for(int i=1;i<=n;i++){//上边界
  for(int j=i;j<=n;j++){//下边界
    for(int l=1,r=1,sum=0;r<=m;r++){//左右指针
      sum+=a[j][r]-a[i-1][r];//第r列的[i,j]行的和
      while(sum>k){//如果超过了就移动左指针
        sum-=a[j][l]-a[i-1][l];
        l++;
      }
      cnt+=r-l+1;
    }
  }
}
	cout<<cnt;
	return 0;
} 
相关推荐
诚丞成6 分钟前
BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)
java·算法·宽度优先
hongjianMa7 分钟前
2024睿抗编程赛国赛-题解
算法·深度优先·图论·caip
czy878747526 分钟前
两种常见的C语言实现64位无符号整数乘以64位无符号整数的实现方法
c语言·算法
虾球xz36 分钟前
游戏引擎学习第277天:稀疏实体系统
c++·学习·游戏引擎
想睡hhh40 分钟前
c++进阶——哈希表的实现
开发语言·数据结构·c++·散列表·哈希
yzx99101342 分钟前
支持向量机案例
算法·机器学习·支持向量机
行思理42 分钟前
JIT+Opcache如何配置才能达到性能最优
c++·php·jit
天上路人1 小时前
采用AI神经网络降噪算法的语言降噪消回音处理芯片NR2049-P
深度学习·神经网络·算法·硬件架构·音视频·实时音视频·可用性测试
南风与鱼1 小时前
STL详解 - 红黑树模拟实现map与set
c++·红黑树封装map和set
chao_7891 小时前
手撕算法(定制整理版2)
笔记·算法