题目:[USACO16JAN]Subsequences Summing to Sevens S - 洛谷
题目大意
给定一个序列,要求计算出能被7整除的最长序列
坑点
无
数据范围
int足以
思路
可以运用前缀和,再进行判断
代码
#include<iostream>
using namespace std;
long long int a[50010];
long long int sum[50010];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+a[i];//前缀和
}
for(int i=1;i<=n;i++)
{
sum[i]=sum[i]%7;//取余
}
int maxn=-1;//给定一个数
for(int i=0;i<=6;i++)
{
int l=0,r=0;//定义左右端点
if(i==0)
{
for(int j=n;j>=1;j--)
{
if(sum[j]==i)//判断
{
r=j;
break;
}
}
maxn=max(maxn,r);//最大值
continue;
}
for(int j=1;j<=n;j++)
{
if(sum[j]==i)
{
l=j;
break;
}
}
for(int j=n;j>=1;j--)
{
if(sum[j]==i)
{
r=j;
break;
}
}
if(l!=0&&r!=0)
{
maxn=max(maxn,r-l);
}
}
if(maxn==-1)
{
cout<<0;
}else{
cout<<maxn;
}
}
总结
运用前缀和运算,再对余数判断
该博客介绍了如何解决USACO16JAN的Subsequences Summing to Sevens S问题。主要内容是通过使用前缀和技巧来计算序列中能被7整除的最长子序列,数据范围表明整型变量即可满足需求。文章提供了清晰的思路和代码实现。

643

被折叠的 条评论
为什么被折叠?



