首页 > 其他分享 >连续数列和问题

连续数列和问题

时间:2023-04-28 21:37:51浏览次数:33  
标签:数列 int sum long 问题 连续 ans main 数字

关于7的迷题
Description

给你n个数,分别是a[1],a[2],...,a[n]。

求一个最长的区间[x,y], 使得区间中的数(a[x],a[x+1],a[x+2],...,a[y-1],a[y])的和能被7整除。

输出区间长度。若没有符合要求的区间,输出0。

Format
Input
第一行给出数字N,1≤N≤50,000

接下来N个数字,值在[0…1,000,000]

Output
如题

Samples
输入数据 1
7
3
5
1
6
2
14
10
输出数据 1
5
Hint

选取区间

[5,1,6,2,14]

其总和为7的倍数

 

#include<bits/stdc++.h>
using namespace std;
int n,a,s,l[7],r[7],ans; 
int main()
{
	scanf("%d",&n);
	memset(l,-1,sizeof(l));
	l[0]=0;
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&a);
		s=(s+a)%7;
		if(l[s]==-1)
		    l[s]=i;
		r[s]=i;
	}
	for(int i=0;i<=6;++i)
	    if(l[i]!=-1)
		   ans=max(ans,r[i]-l[i]);
	printf("%d",ans);
}

  

给你N个数字,每个数字不是1就是-1 问多少个连续的数列和为0
# Format
## Input
第一行为N, ,N小于等于1e6
第二行为N个用空格隔开的1和-1序列。
## Output
总方案数MOD 999999的值
# Samples
```input1
9
-1 1 -1 -1 -1 1 1 -1 -1
``` ```
output1
8 ```
Hint

例如第1个数字到第2个数字 第2个到第7个数字 第6个到第9个数字 它们的和均为0 一共有8种情况 此题需要用到数组来保存来数字

 

#include<bits/stdc++.h>
using namespace std;
#define int long long
long long n,m,ans;
int  v[2200000]; 
int a[1002001],sum[1002001];
main()
{
	cin>>n;
	
	int temp=1000000;
	v[0+temp]=1;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];
		ans=(ans+v[sum[i]+temp])%999999;
		v[sum[i]+temp]++;
	}
	cout<<ans;
	return 0;
}

  

 

  

 

 

求方案

Description
有 n 个正整数排成一行。你的目的是要从中取出一个或连续的若干个数,使它们的和能够被 k 整除。

例如,有 6 个正整数,它们依次为 1; 2; 6; 3; 7; 4。

若 k = 3,则你可以取出 1; 2; 6,或者 2; 6; 3; 7,也可以仅仅取出一个 6 或者 3 使你所取的数之和能被 3 整除。

当然,满足要求的取法不止以上这 4 种。事实上,一共有 7 种取法满足要求。

给定 n 和 k,以及这 n 个数。

你的任务就是确定从这 n 个数中取出其中一个数或者若干连续的数,使它们的和能被 k 整除有多少方法。

记 Ha = 1234567,由于取法可能很多,

因此你只需要输出它 mod Ha 的值即可

Format
Input
第一行为两个整数 n; k。

以下 n 行每行一个正整数,描述这个序列。

1 <= n <= 500000; 1 <= k <= 100000

Output
输出一个整数,为答案 mod Ha 的结果。

Samples
输入数据 1
6 3
1
2
6
3
7
4
输出数据 1
7

 

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 110;
int n, k, ans;
int b[N];

int main ()
{
	
	
	scanf ("%d %d", &n, &k);
	b[0] = 1;
	for (int i = 1, x, sum = 0; i <= n; i ++) 
	{
		scanf ("%d", &x);
	    sum = (sum + x) % k;
	    ans += b[sum];
	    b[sum] ++;
	}
	printf ("%d\n", ans);
	
}
/*
*/

  

 

P01236. Divisible Subsequence

Description
给出一个数列,希望你从中找出一些连续的子数列,要求子序列的元素之和能被N整除

Format
Input
第一行给出数字D,N。 D代表数列一共有多少个元素,N代表被整除的数 下面一行给出D个数字, 每个数字范围在[1, 1000000000]

1 <= d < = 1000000

1<= N <=50000.

Output
一共有多少个子序列满足条件

Samples
输入数据 1
3 3
1 2 3
输出数据 1
3
【样例解释】

你可以取[1,2],[1,2,3],[3]这三个子数列

 

#include<cstdio>
using namespace std;
long long n,k,sum[1000005];
long long ans,qwq;
int main(){sum[0]=1;
scanf("%d%d",&n,&k);
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
qwq=(qwq+x)%k;
sum[qwq]+=1;
}
for(int i=0;i<k;i++)
if(sum[i]>=1)
ans+=(sum[i]*(sum[i]-1))/2;
printf("%lld",ans);
return 0;
}

  

 

#include <bits/stdc++.h>
 
using namespace std;
 
const int N = 1e5 + 110;
int n, k;
int b[N];
long long ans;
 
int main ()
{
     
     
    scanf ("%d %d", &n, &k);
    b[0] = 1;
    for (int i = 1, x, sum = 0; i <= n; i ++)
    {
        scanf ("%d", &x);
        sum = (sum + x) % k;
        ans += b[sum];
        b[sum] ++;
    }
    cout<<ans<<endl;
     
}

  

 

P05537. 连续子序列之和

Description
给你一个N,再给出这个数字 问有多少连续子序列之和等于 K

Format
Input
第一行给出N,K 接下来给出N个数字

1≤N≤2×10^5

∣Ai∣≤10^9

∣K∣≤10^15

Output
如题目

Samples
输入数据 1
6 5
8 -3 5 7 0 -4

输出数据 1
3
输入数据 2
4 3
3 3 3 3
输出数据 2
4

 

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,ans;
map<int,int> v; 
int a[202001],sum[202001];
main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];
		ans+=v[sum[i]-m];
		v[sum[i]]++;
	}
	cout<<ans;
	return 0;
}

  

标签:数列,int,sum,long,问题,连续,ans,main,数字
From: https://www.cnblogs.com/cutemush/p/17363185.html

相关文章

  • 三色球问题
    问题描述:一个口袋中放有12个球,已知其中三个是红的,三个是白的,6个是黑的,现在从中任取8个,问共有多少种可能的颜色搭配?分析:设抽到的红球有i个,白球有j个,则黑球有8-i-j个,但是黑球的个数不能超过6个,也就是红球和白球的和不能小于2,利用两层for循环,输出判断的条件是8-i-j<=6。 #includ......
  • Problem J: 括号匹配问题
    ProblemDescription在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用......
  • COMPSCI 589 问题解答
    COMPSCI589Homework4-Spring2023DueMay6,2023,11:55pmEasternTime1InstructionsThishomeworkassignmentconsistsofaprogrammingportion.Whileyoumaydiscussproblemswithyourpeers,youmustanswerthequestionsonyourownandimplementall......
  • 在使用showModalDialog中为解决刷新时弹出新窗口时用到iframe所带来的一个问题
    问题描述:我们在开发过程中使用showModalDialog来产生一个弹出窗口,而在这个弹出窗口中要做一个刷新,或者是切换到其它的url时会弹出新窗口。为了解决这个问题,网上有个办法是采用iframe,在showModalDialog窗口中使用iframe这样就不会有弹出窗口了,但这样使用又带来了一个小的问题,我们页......
  • 关于在ECside列表页面点击标题查看明细后不能回到原来所在页的问题
    [u][b]问题:[/b][/u]在使用ECside分页框架的过程中,我们在EC列表页面点击某一行记录,进入该行记录的详细信息页面,此时我们在返回时却又只能返回到第一页,不能返回原来所在的第二页。其中还有原来我们设置好的每页显示多少行,也变回原来的默认值了,排序方式也变成默......
  • 5760: 家庭问题 并查集
    描述 有n个人,编号为1,2,……n,另外还知道存在K个关系。一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员。当n,k和k个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?例如:n=6,k=3,三个关系为(1,2),(1,3),(4,5)此时,6个人组成三个家庭,即:{1,2,3}为一个家庭,{4,5}为一个家......
  • “makefile:425: *** 遗漏分隔符 。 停止。”问题解决
    在终端下输入make时出现“makefile:2:***遗漏分隔符。停止。”问题,原因是在编写makefile文件时:3:3.c        gcc-o33.cgcc前的是tab分隔符,不能用空格,否则会出现“makefile:2:***遗漏分隔符。停止。”提示。。。make中规定每一Shell命令之前的开头必须使用<t......
  • GridView中CheckBox的数据绑定显示选中和未选中问题
    https://www.cnblogs.com/zxd543/p/3121169.html效果如下(以会员价为例)会员价(MemberPrice)字段的数据库类型为int(1表示true,0表示false)页面绑定如下:<asp:TemplateFieldHeaderText="会员价"><ItemStyleHorizontalAlign="Center"Width="60px"/>......
  • BTrace : Java 线上问题排查神器
    BTrace是什么BTrace是检查和解决线上的问题的杀器,BTrace可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务。写好脚本,直接用命令执行即可,不用动原程序的代码。原理总体来说,BTrace是基于动态字节码修改技术(Hotswap)来实现运行时java......
  • text-shadow和文字颜色渐变冲突问题
    设计给的设计图同时有文字颜色渐变,文字阴影,如下图实际实现效果是: text-shadow覆盖了文字颜色渐变的样式解决方案:<divclass="platformtext"text="能源云推广展示平台">能源云推广展示平台</div>.platformtext{color:#fff;font-weight:40......