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;
}
相关推荐
浅念-8 小时前
递归解题指南:LeetCode经典题全解析
数据结构·算法·leetcode·职场和发展·排序算法·深度优先·递归
Kiling_07048 小时前
Java集合进阶:Set与Collections详解
算法·哈希算法
智者知已应修善业8 小时前
【51单片机89C51及74LS273、74LS244组成】2022-5-28
c++·经验分享·笔记·算法·51单片机
洛水水9 小时前
【力扣100题】33.验证二叉搜索树
算法·leetcode·职场和发展
SimpleLearingAI9 小时前
聚类算法详解
算法·数据挖掘·聚类
刀法如飞10 小时前
Go 字符串查找的 20 种实现方式,用不同思路解决问题
算法·面试·程序员
Dlrb121111 小时前
C语言-指针数组与数组指针
c语言·数据结构·算法·指针·数组指针·指针数组·二级指针
WL_Aurora11 小时前
Python 算法基础篇之集合
python·算法
平行侠12 小时前
A15 工业路由器IP前缀高速检索与内存压缩系统
网络·tcp/ip·算法
阿旭超级学得完13 小时前
C++11包装器(function和bind)
java·开发语言·c++·算法·哈希算法·散列表