洛谷 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;
}
相关推荐
晚风吹长发20 分钟前
二分查找算法+题目详解
c++·算法·二分查找
悠悠~飘26 分钟前
18.PHP基础-递归递推算法
算法·php
pilgrim531 小时前
结合 Leetcode 题探究KMP算法
算法·leetcode
罗义凯1 小时前
其中包含了三种排序算法的注释版本(冒泡排序、选择排序、插入排序),但当前只实现了数组的输入和输出功能。
数据结构·c++·算法
kevien_G12 小时前
JAVA之二叉树
数据结构·算法
春蕾夏荷_7282977252 小时前
c++ easylogging 使用示例
c++·log·easylogging
syt_biancheng2 小时前
Day3算法训练(简写单词,dd爱框框,3-除2!)
开发语言·c++·算法·贪心算法
二进制的Liao2 小时前
【编程】脚本编写入门:从零到一的自动化之旅
数据库·python·算法·自动化·bash
自然数e3 小时前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
云在Steven3 小时前
在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
人工智能·算法·性能优化