2015 Multi-University Training Contest 1记录
1001 OO’s Sequence
分析:
对于例子,能够得到,我们要求的是(1,1)(1,2)(1,3)(1,4)(1,5)(2,2)(2,3)(2,4)(2,5)(3,3)(3,4)(3,5)(4,4)(4,5)(5,5)这些范围内满足题目中所给的要求的i的个数。所以能够将两个求和符号转换为考虑原来ai序列中每个ai对于结果的贡献。
对于题目,刚好能够发现,我们仅仅须要对于每个ai求离它左右近期的因子就能够了。这样两个因子之间范围内每个i都是满足题目要求。
然后考虑求解ai因子的策略。假设对于每个ai都是每次左右分别搜索,那么一定会超时的。所以我们採取一个预处理,这里是学长教我的,方法非常巧妙。自己无法总结出来,所以还是看看代码里面怎么求的就好了。
还有。那几个10w的数组必须开在全局变量中,不然会爆栈。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
int a[100000+5],r[100000+5],l[100000+5],vis[100000+5];
int main()
{
int i,j,ans,n;
while(~scanf("%d",&n))
{
if(n==0) break;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(l,0,sizeof(l));
memset(vis,0,sizeof(vis));
for(i=0;i<=n;i++) r[i]=n+1;
for(i=1;i<=n;i++)
{
for(j=1;j*j<=a[i];j++)
{
if(a[i]%j!=0) continue;
if(vis[j]>l[i]&&vis[j]<i) l[i]=vis[j];
if(vis[a[i]/j]>l[i]&&vis[a[i]/j]<i) l[i]=vis[a[i]/j];
}
vis[a[i]]=i;
}
memset(vis,0,sizeof(vis));
for(i=n;i>=1;i--)
{
for(j=1;j*j<=a[i];j++)
{
if(a[i]%j!=0) continue;
if(vis[j]<r[i]&&vis[j]>i) r[i]=vis[j];
if(vis[a[i]/j]<r[i]&&vis[a[i]/j]>i) r[i]=vis[a[i]/j];
}
vis[a[i]]=i;
}
for(ans=0,i=1;i<=n;i++)
{
ans+=(r[i]-i)*(i-l[i]);
ans%=mod;
}
printf("%d\n",ans%mod);
}
return 0;
}
2015 Multi-University Training Contest 1记录的更多相关文章
- 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】
2015 UESTC Winter Training #7 2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest 据 ...
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- 2015 Multi-University Training Contest 8 hdu 5381 The sum of gcd
The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 2015 Multi-University Training Contest 8 hdu 5390 tree
tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...
- 2015 Multi-University Training Contest 3 hdu 5317 RGCDQ
RGCDQ Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- 2015 Multi-University Training Contest 2 hdu 5306 Gorgeous Sequence
Gorgeous Sequence Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 2015 Multi-University Training Contest 10(9/11)
2015 Multi-University Training Contest 10 5406 CRB and Apple 1.排序之后费用流 spfa用stack才能过 //#pragma GCC o ...
- 2015 UESTC Winter Training #8【The 2011 Rocky Mountain Regional Contest】
2015 UESTC Winter Training #8 The 2011 Rocky Mountain Regional Contest Regionals 2011 >> North ...
- Root(hdu5777+扩展欧几里得+原根)2015 Multi-University Training Contest 7
Root Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Su ...
随机推荐
- StringUtils.isEmpty()和StringUtils.isBlank() 区别
isBlank()判断空的情况包括了isEmpty()的情况,isBlank()不仅判断了 无对象.空对象的情况,而且也判断了无意义的空白字符,比如空格等.
- mybatis获取表信息,以及遍历ResultSet
@RunWith(SpringRunner.class) @SpringBootTest public class BravolinksCrmServerApplicationTests { @Aut ...
- python日志模块笔记
前言 在应用中记录日志是程序开发的重要一环,也是调试的重要工具.但却很容易让人忽略.之前用flask写的一个服务就因为没有处理好日志的问题导致线上的错误难以察觉,修复错误的定位也很困难.最近恰好有时间 ...
- 【cocos2d-js官方文档】四、基础数据类型
基础数据类型统一通过方法来创建.不再支持new方式 1.坐标cc.Point 一共3种创建方式 结构:{x:0,y:0} //1 快捷创建,返回相当于cc.p(0,0) var point1 = cc ...
- mongodb复制集搭建
注:mongodb当前版本是3.4.3 1.准备三个虚拟机做服务器 192.168.168.129:27017 192.168.168.130:27017 192.168.168.131:27017 ...
- csu1216( Trie )
csu1216 题意 给定一些数,求这些数中两个数的异或值最大的那个值. 分析 转化成二进制数存入字典树,比如说要查询 \(0011\) ,显然和 \(1100\) 结合最优,所以我们直接在字典树上寻 ...
- 模板-网络流-Dinic
//Dinic struct Edge{ int from,to,cap,flow; Edge(){ } Edge(int a,int b,int c,int d){ from=a; to=b; ca ...
- 学习python网站
http://code.ziqiangxuetang.com/python/python-dictionary.html
- 1.3(Spring学习笔记)Spring-AOP
一.AOP简介 AOP面向切面编程,是将一种横向抽取机制,将多个类中需要使用的方法提取出来. 例如,这里有两个类,一个Cat,一个Dog,动物都需要吃饭睡觉,如果按照传统的思想. 给两类中都添加吃饭和 ...
- 生成随机位数的UUID
1,生成UUID package com.jeeplus.common.utils; import java.util.UUID; /** * 生成唯一的UUID * * @author songya ...