蓝桥杯打卡0.0.0.0

南岸以南南岸哀 2023-02-12 23:27:48

给定一个长度为 n� 的数组 a1,a2,…,an�1,�2,…,��。

现在,要将该数组从中间截断,得到三个非空子数组。

要求,三个子数组内各元素之和都相等。

请问,共有多少种不同的截断方法?

输入格式

第一行包含整数 n�。

第二行包含 n� 个整数 a1,a2,…,an�1,�2,…,��。

输出格式

输出一个整数,表示截断方法数量。

数据范围

前六个测试点满足 1≤n≤101≤�≤10。
所有测试点满足 1≤n≤1051≤�≤105,−10000≤ai≤10000−10000≤��≤10000。

#include <iostream>
#include <cstring>
#include <algorithm>
#include<unordered_map>
using namespace std;
const int N = 1e5+10;
#define int long long
typedef pair<int, int> PII;
int n,m;
int s[N];
int a[N];
int left[N],r[N];
signed main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);
    cin>>n;
    unordered_map<int,int> mp;
    int sum=0,res=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        s[i]=s[i-1]+a[i];
        sum+=a[i];
    }
    
    if(sum%3!=0||n<=2){
        cout<<0;
        return 0;
    }

    int x=sum/3;
    int cnt=0,y=0;
    for(int i=n;i>=1;i--)
    {
        y+=a[i];
        r[i]=cnt-(a[n]==x&&n!=4);
        if(y==x)cnt++;
    }
    for(int i=1;i<=n-2;i++)
    {
        if(s[i]==x)
        {
            res+=r[i];    
        }
    }
    

    cout<<res;
}

给定一个长度为 N� 的数列,A1,A2,…AN�1,�2,…��,如果其中一段连续的子序列 Ai,Ai+1,…Aj��,��+1,…�� 之和是 K� 的倍数,我们就称这个区间 [i,j][�,�] 是 K� 倍区间。

你能求出数列中总共有多少个 K� 倍区间吗?

输入格式

第一行包含两个整数 N� 和 K�。

以下 N� 行每行包含一个整数 Ai��。

输出格式

输出一个整数,代表 K� 倍区间的数目。

 

#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>

using namespace std;
const int N = 1e5+10;
#define int long long
int n,m;
int a[N];
int s[N];
signed main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];
    map<int,int> mp;
    mp[0]++;
    int res=0;
    for(int i=1;i<=n;i++)
    {
        int x=(s[i]%m+m)%m;
       
        res+=mp[x]; mp[x]++;
    }
    cout<<res;
    
}

 

...全文
19 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,414

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧