洛谷 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;
}
相关推荐
im_AMBER4 小时前
Leetcode 115 分割链表 | 随机链表的复制
数据结构·学习·算法·leetcode
Liue612312314 小时前
【YOLO11】基于C2CGA算法的金属零件涂胶缺陷检测与分类
人工智能·算法·分类
!!!!8134 小时前
蓝桥备赛Day1
数据结构·算法
Mr_Xuhhh4 小时前
介绍一下ref
开发语言·c++·算法
王老师青少年编程4 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
夏鹏今天学习了吗4 小时前
【LeetCode热题100(99/100)】柱状图中最大的矩形
算法·leetcode·职场和发展
Trouvaille ~4 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
啊阿狸不会拉杆4 小时前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝
Mr_Xuhhh4 小时前
C++11实现线程池
开发语言·c++·算法
若水不如远方4 小时前
分布式一致性(三):共识的黎明——Quorum 机制与 Basic Paxos
分布式·后端·算法