P3131 [USACO16JAN] Subsequences Summing to Sevens S

P3131 USACO16JAN Subsequences Summing to Sevens Shttps://www.luogu.com.cn/problem/P3131算法:前缀和

思路

O(N^2)的复杂度降低为O(N)

(a - b) % k = 0 ==> a % k = b % k

从上面的公式我们可以得出一个结论:余数相同的两个数,其差能被 k 整除

C++代码
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define endl '\n'
const int N = 5e4 + 10;

int n,m;
int a[N],s[N];
int pre[7],post[7];

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n ;
	
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		s[i] = (s[i-1] + a[i]) % 7; //前缀和存7的余数 
	}
	s[0] = 0;
	for(int i = n; i >= 0; i--){  //倒序,找余数为 i 的第一个位置 
	     pre[s[i]] = i;
	}
	for(int i = 0 ; i <= n; i++){
		post[s[i]] = i;      //正序,找余数为 i的最后一个位置 
	}
	
	int ans = 0;
	//7的倍数 因此余数是从0~7 
	for(int i = 0; i < 7; i++){
		ans = max(ans,post[i] - pre[i]);
	}
	cout << ans ;
	return 0;
}
相关推荐
Java_2017_csdn几秒前
ComplexKeysShardingAlgorithm 小结
java·大数据·算法
海梨花6 分钟前
快手面试高频算法题
java·算法·面试
lqqjuly8 分钟前
超分辨率算法深度解析(Super-Resolution Algorithms)
算法
嵌入式老牛2 小时前
液晶段码(米/日字格)识别—倾斜校正
opencv·算法·仿射变换
luj_17682 小时前
残熵算法:风险缓冲与效率优化的融合
c语言·开发语言·网络·经验分享·算法
oddsand12 小时前
pgvector 三大相似度算法
人工智能·算法·机器学习
运筹vivo@2 小时前
LeetCode 2574. 左右元素和的差值
算法·leetcode·职场和发展·每日一题
计算机安禾3 小时前
【数据库系统原理】第4篇:关系数据结构的形式化定义:域、笛卡尔积与关系模式
数据结构·数据库·算法
手写码匠3 小时前
手写 DeepSeek 推理引擎优化:从 FP16 到 INT4 的量化加速实战
人工智能·深度学习·算法·aigc
GuWenyue3 小时前
LeetCode 76 最小覆盖子串|JS 滑动窗口标准解法
前端·算法·面试