【洛谷】P5542 [USACO19FEB] Painting The Barn S(二维前缀和优化)

文章讨论了如何通过优化暴力求解二维数组的前缀和问题,提出经典的方法并给出C++代码示例,以提升效率并确保AC。
摘要由CSDN通过智能技术生成

思路:

这本暴力思路是不是很清晰,但是纯暴力这数据范围必t,我们观察发现其实耗时就是标记涂过的地方,所以我们现在将重心放在我们该如何优化上,不卖关子了,其实这是一个非常经典的二维前缀和优化~(具体细节观看代码,稳稳AC)

ACcode:


#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+10;
int n,k,a[N][N],s[N][N];
void solve() {
 cin>>n>>k;
 for(int i=1;i<=n;i++){
    int x1,x2,y1,y2;
    cin>>x1>>y1>>x2>>y2;
    x1++,x2++,y1++,y2++;//因为我们规定的数组下标从一开始
	a[x1][y1]++;
	a[x2][y2]++;
	a[x1][y2]--;
	a[x2][y1]--; 
 }
 int ans=0;
 for(int i=1;i<=1000;i++)
 for(int j=1;j<=1000;j++){
 	s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a[i][j];
 	if(s[i][j]==k)ans++;
 }
 cout<<ans<<"\n";
}
signed main() {
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int t=1;
	//cin>>t;
	while(t--) {
		solve();
	}
	return 0;
}




over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值