首页 > 其他分享 >洛谷-3131

洛谷-3131

时间:2022-11-11 20:35:47浏览次数:78  
标签:洛谷 int back 3131 ans 下标

洛谷-3131

思路

首先有一个\(brute-force\),从大到小枚举区间长度,然后通过前缀和找是否存在这样的区间,时间复杂度\(o(n^2)\)。

在上述操作中,实际上我们做的就是找到两个下标\(a, b\),判断\((s[b] - s[a - 1])\) 在模7下是否为\(0\)。即

\[(S[b] - S[a - 1]) \equiv 0 \pmod 7 \]

也即

\[S[b] \equiv S[a - 1] \pmod 7 \]

因此,我们可以对前缀和数组 以mod7的取值进行分组,对\(0 \dots 6\)的每一组,找最大和最小下标,答案就在差值之间。(注:下标0也要放进0组中

Code

#include <bits/stdc++.h>
using namespace std;
#define _u_u_ ios::sync_with_stdio(false), cin.tie(nullptr)
#define cf int _o_o_;cin>>_o_o_;for (int Case = 1; Case <= _o_o_;Case++)
#define SZ(x) (int)(x.size())
inline void _A_A_();
signed main() {_A_A_();return 0;}

using ll = long long;
// #define int long long
int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
const int N = 210, M = 5010;
const int inf = 0x3f3f3f3f;

inline void _A_A_() {
    #ifdef LOCAL
    freopen("in.in", "r", stdin);
    #endif
    _u_u_;
    int n;
    cin >> n;
    vector<ll> v(n + 1,0), s(n + 1, 0);
    vector<vector<int>> m(7);
    m[0].push_back(0);
    for (int i = 1;i <= n;i++) {
        cin >> v[i];
        s[i] = s[i - 1] + v[i];
        m[s[i] % 7].push_back(i);
    }
    int ans = 0;
    for (int i = 0;i < 7;i++) {
        if (SZ(m[i])>= 2) {
            ans = max(ans, m[i].back() - m[i].front());
        }
    } 
    cout << ans << "\n";
    return;
}

标签:洛谷,int,back,3131,ans,下标
From: https://www.cnblogs.com/FanWQ/p/16881776.html

相关文章

  • 洛谷-4552
    洛谷-4552思路首先需要由区间加减法或者最后的形式(变为1个数)联想到差分在差分的形式下,只剩一个数意味着差分数组中\(2\dotsn\)都必须为0,其他任意。而给我们的操作......
  • 洛谷刷题_质数口袋
    P5723【深基4.例13】质数口袋题目链接:https://www.luogu.com.cn/problem/P5723知识点:埃氏筛原理:要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数筛掉,......
  • 洛谷1923 排序
    洛谷1923错误这道题用的快排,但是非常卡时间,最后将快排优化,新学stl中nth_element(数组名,数组名+第k小元素,数组名+元素个数);将第k小元素找出,最后直接输出就行//判断k......
  • 洛谷B2079求出e的值
    解题思路:注意变量的类型就ok了,没什么不容易理解的地方#include<stdio.h>intmain(){doublenum=1,sum=1;longlongb=1,n;scanf("%d",&n);for(inti=1;i<=n......
  • 洛谷 P4423 [BJWC2011]最小三角形 题解
    求平面最近点对的时候有这样一种思路:将所有点全部绕原点旋转同一个角度,然后按横坐标排序。根据数学直觉,在随机旋转后,答案中的两个点在数组中肯定不会离得太远。把这种......
  • 洛谷刷题_ISBN 号码
    P1055[NOIP2008普及组]ISBN号码题目链接:https://www.luogu.com.cn/problem/P1055这道题从题意上来说还是比较简单的,刚开始想用整形直接输入一个一个数字,没有想到scan......
  • 洛谷刷题_三角形分类
    【深基3.习8】三角形分类题目描述给出三条线段a,b,c的长度,均是不大于10000的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?如果三条线段不能组成一......
  • 洛谷B2078含k个三的数
    自行体会如果实在不会,就调试一下#include<stdio.h>intmain(){longintm;intn,k,num=0;scanf("%ld%d",&m,&k);for(inti=1;i<=15;i++){if(i=......
  • 洛谷-P3478 STA-Station
    STA-Station换根dp模板去到相邻的点可以根据去到的点的子树有多少个结点,来调整当前的值#include<iostream>#include<cstdio>#include<algorithm>#include<vecto......
  • 洛谷 [AGC021B] Holes 蓝 题解
    前言学校基础模拟赛的题,当时有思路但是不太会写凸包就没做,下来看了看,自己的思路大部分是正确的,有些细节没有想到,在此写篇题解。我用的是Andrew求凸包。思路答案为0......