hdu5288(思维+分解因子)
2016-07-01 21:33
393 查看
链接:点击打开链接
题意:给出含n个元素的数组a,问所有区间中满足对该区间所有aj(j!=i),都使ai%aj!=0的i的个数
代码:#include <math.h>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const long long MOD=1000000007;
int a[100005],pos[100005],l[100005],r[100005];
int main(){ //换种思路考虑就是每个值在那个区间会加1
int n,i,j; //因此找到每个值能够整除的最近的左边界
long long ans; //和右边界即可,最后这个值贡献的就是
while(scanf("%d",&n)!=EOF){ //(i-l[i])*(r[i]-i)
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(l,0,sizeof(l));
memset(pos,0,sizeof(pos));
for(i=1;i<=n;i++){
r[i]=n+1;
for(j=1;j<=(int)sqrt(a[i]*1.0);j++){
if(a[i]%j==0)
l[i]=max(l[i],max(pos[j],pos[a[i]/j]));
} //找到左边最近出现过的因子,右边也是一样
pos[a[i]]=i;
}
for(i=1;i<=10000;i++)
pos[i]=n+1;
for(i=n;i>=1;i--){
for(j=1;j<=(int)sqrt(a[i]*1.0);j++){
if(a[i]%j==0)
r[i]=min(r[i],min(pos[j],pos[a[i]/j]));
}
pos[a[i]]=i;
}
ans=0;
for(i=1;i<=n;i++)
ans=(ans+(i-l[i])*(r[i]-i))%MOD;
printf("%I64d\n",ans);
}
return 0;
}
题意:给出含n个元素的数组a,问所有区间中满足对该区间所有aj(j!=i),都使ai%aj!=0的i的个数
代码:#include <math.h>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const long long MOD=1000000007;
int a[100005],pos[100005],l[100005],r[100005];
int main(){ //换种思路考虑就是每个值在那个区间会加1
int n,i,j; //因此找到每个值能够整除的最近的左边界
long long ans; //和右边界即可,最后这个值贡献的就是
while(scanf("%d",&n)!=EOF){ //(i-l[i])*(r[i]-i)
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(l,0,sizeof(l));
memset(pos,0,sizeof(pos));
for(i=1;i<=n;i++){
r[i]=n+1;
for(j=1;j<=(int)sqrt(a[i]*1.0);j++){
if(a[i]%j==0)
l[i]=max(l[i],max(pos[j],pos[a[i]/j]));
} //找到左边最近出现过的因子,右边也是一样
pos[a[i]]=i;
}
for(i=1;i<=10000;i++)
pos[i]=n+1;
for(i=n;i>=1;i--){
for(j=1;j<=(int)sqrt(a[i]*1.0);j++){
if(a[i]%j==0)
r[i]=min(r[i],min(pos[j],pos[a[i]/j]));
}
pos[a[i]]=i;
}
ans=0;
for(i=1;i<=n;i++)
ans=(ans+(i-l[i])*(r[i]-i))%MOD;
printf("%I64d\n",ans);
}
return 0;
}
相关文章推荐
- ButtonRequest(主类)以及Button类
- microstation level3 03
- Linux端口的关闭和启用
- HDU 2036 改革春风吹满地 (计算几何)
- NestIn VS插件 visual studio 中将同类CS文件放在一起显示
- 344. Reverse String
- Android_基础 Notification
- ACdream 1429 Rectangular Polygon
- 1010. 一元多项式求导 (25)
- IO负载高的来源定位 IO系列
- .net core 跨平台实践
- TypedValue.applyDimension()的作用
- javascript 替换元素节点replaceChild()
- iOS 开发 零散知识代码片段
- redis3.2 最新版本启动配置文件redis.conf详细说明
- 万万没想到
- 《战略调色板》:《经济学人》管理专栏文章合集第3辑,四星推荐。
- Office 文件操作权威指南06
- CCNA-acl配置注意事项
- 磁盘性能指标--IOPS 理论