洛谷 P3131 [USACO16JAN] Subsequences Summing to Sevens S


被普及-卡的没思路真是蒟蒻啊233

优化思路

每次都在枚举(a[r]-a[l-1])%7==0,所以可以认为数组大小对最终答案没有影响,考虑对前缀和数组取模,那么如果有a[r]的值等于a[l-1]的值相等(即余数相等),那么两者相减余数为0,则为7的倍数。

Debug

因为是对前缀和数组取模,那么a[r]-a[l]就是原数组的长度,不用+1,但是仔细一看会发现枚举的时候第一个数永远没有算在内,即包含第一个数的连续区间,那么初始化的时候判断一下就行了。

AC代码

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

int n,a[N],l[7],r[7],ans;

signed main(){
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>a[i];
        a[i]+=a[i-1];
        a[i]%=7;
        if(!a[i])ans=i;//累计算上1的区间
        if(!l[a[i]])l[a[i]]=i;
        r[a[i]]=i;
    }

    for(int i=0;i<7;++i)
        ans=max(ans,r[i]-l[i]);
    cout<<ans<<endl;
    return 0;
}
相关推荐
惯导马工2 分钟前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农1 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了2 小时前
AcWing学习——双指针算法
c++·算法
感哥2 小时前
C++ 指针和引用
c++
moonlifesudo2 小时前
322:零钱兑换(三种方法)
算法
感哥13 小时前
C++ 多态
c++
沐怡旸19 小时前
【底层机制】std::string 解决的痛点?是什么?怎么实现的?怎么正确用?
c++·面试
NAGNIP20 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队21 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
River4161 天前
Javer 学 c++(十三):引用篇
c++·后端