Python数据分析--Pandas中Series与DataFrame属性

Rust tcp 客户端和服务端实现

  返回  

51nod 2518 和为S

2021/8/21 19:53:35 浏览:

题目描述:

b有一个01序列A,她想知道A有多少个非空连续子序列和为S。

你能帮帮她吗?

 收起

输入

第一行输入一个数n,表示A的长度;
第二行输入n个数‘0’或‘1’,表示A中的元素,以空格隔开;
第三行输入一个非负整数S;
其中0≤S≤n≤30000。

输出

输出一个数,表示子数组的个数

输入样例

5
1 0 1 0 1
2

输出样例

4

分析:
sum[r]-sum[l-1]==k,则对于每一个sum[i]统计其前面k-sum[i]的个数即可,注意最后加上sum[i]==k的情况。

扩展:

给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。  
你能求出数列中总共有多少个K倍区间吗?  

求区间[l,r]的和是k的倍数的个数。区间[l,r]的和是k的倍数即(sum[r] - sum[l-1])%k == 0 即sum[r]%k == sum[l-1]%k,即对于每一个sum[i]求sum[i]%k的个数即可,注意最后加上map[0]的情况

 

#include<bits/stdc++.h>
using namespace std;
int a[30010];
int main()
{
  int n,k,sum=0;
  cin>>n;
  a[0]=0;
  for(int i=1;i<=n;i++)
  {
  	cin>>a[i];
  	a[i]+=a[i-1];
  }
  cin>>k;
  for(int i=1;i<=n;i++)
  {
  	if(a[i]==k) sum++;
  	for(int j=1;j<i;j++)
  	{
  	 if(a[i]-a[j]<k) break;
  	 if(a[i]-a[j]==k) sum++;	
	}
  }
  cout<<sum;
  return 0;
}

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号