设为首页 加入收藏

TOP

hdu 5288OO’s Sequence
2015-07-22 20:09:59 来源: 作者: 【 】 浏览:12
Tags:hdu 5288OO Sequence

给你n个数,让你找到所有区间内不能整除其它数的数的个数之和

#include 
   
     #include 
    
      #include 
     
       using namespace std; const int mod = 1e9+7; #define ll long long #define N 111111 ll l[N],r[N];//存储左边因子。右边因子的位置 int n,m; int pre[N],last[N]; int a[N]; int main(){ while(scanf(%d,&n)==1){ for(int i=1;i<=n;i++) { scanf(%d,&a[i]); l[i]=1; r[i]=n;//初始化最左边的因子和最右边的因子都是本身 } memset(pre,0,sizeof(pre)); memset(last,0,sizeof(last)); for(int i=1;i<=n;i++){ for(int j=a[i];j<=10000;j+=a[i]) if(pre[j]!=0&&r[pre[j]]==n)//如果已经出现并且在右边最近的因子还没有找到 r[pre[j]]=i-1; pre[a[i]]=i; } for(int i=n;i>0;i--){ for(int j=a[i];j<=10000;j+=a[i]) if(last[j]!=0&&l[last[j]]==1)//如果已经出现并且在左边最近的因子还没有找到 l[last[j]]=i+1; last[a[i]]=i; } /* for(int i=1;i<=n;i++){ printf(%d %d %d ,i,l[i],r[i]); } */ ll ans = 0; for(int i=1;i<=n;i++){ ans = (ans%mod+(ll)(i-l[i]+1)*(r[i]-i+1)%mod)%mod; } printf(%I64d ,ans); } 
     
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu5288(2015多校1)OO’s Sequence 下一篇A strange lift

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: