站外题求助(听说灌水大佬多)
  • 板块灌水区
  • 楼主Chalage_2010
  • 当前回复14
  • 已保存回复14
  • 发布时间2023/8/5 08:45
  • 上次更新2023/11/3 05:50:14
查看原帖
站外题求助(听说灌水大佬多)
760690
Chalage_2010楼主2023/8/5 08:45

D. 数列 Problem ID: 1753 Contest ID: 6178 必做题 Runtime Error

给你一个长度为N的正整数序列,如果一个连续的子序列,子序列的和能够被K整 除,那么就视此子序列合法,求原序列包括多少个合法的连续子序列? 对于一个长度为8的序列,K=4的情况:2, 1, 2, 1, 1, 2, 1, 2 。它的答案为6,子序列 是位置1->位置8,2->4,2->7,3->5,4->6,5->7。

输入格式:

第一行:T,表示数据组数 对于每组数据: 第一行:2个数,K,N 第二行:N个数,表示这个序列

输出格式:

共T行,每行一个数表示答案

样例输入:

2 7 3 1 2 3 4 8 2 1 2 1 1 2 1 2

样例输出:

0 6

数据范围:

30%数据满足:1<=T<=10,1<=N,K<=1000

100%数据满足:1<=T<=20,1<=N<=50000,1<=K<=1000000,序列的每个数<=1000000000

时间限制:

1S

空间限制:

256M 我的代码

#include<bits/stdc++.h>
using namespace std;
void f()
{
	int n,k;
    cin>>k>>n;
    vector<int> a(2*n);
    for (int i = 0; i < n; i++) {
        scanf("%lld",&a[i]);
    }
	int buc[200005], x = 0, ans = 0;
    buc[0] = 1;
    for (int i = 0; i < n; i++) {
        x = (x + a[i]) % k;
        if (x < 0){
            x += k;
        }
        ans += buc[x];
        buc[x]++;
    }
    cout<<ans<<endl;
}
int main() {
    int T;
    cin>>T;
    for(int l=1;l<=T;l++)
    {
    	f();
	}
    return 0;
}

蒟蒻求助

题外话:为什么最近大家求助都发灌水了?

2023/8/5 08:45
加载中...