hdu 5288 OO’s Sequence(计数)
OO has got a array A of size n ,defined a function f(l,r) represent the number of i (l<=i<=r) , that there's no j(l<=j<=r,j<>i) satisfy ai mod aj=0,now OO want to know
∑i=1n∑j=inf(i,j) mod (+).
There are multiple test cases. Please process till EOF.
In each test case:
First line: an integer n(n<=^) indicating the size of array
Second line:contain n numbers ai(<ai<=)
For each tests: ouput a line contain a number ans.
题意:
本来的题意问 枚举所有i,j ,1<=i<=j<=n, 然后计算f(i,j)和是多少。
f(l,r)的值 是 输入的数组下标 l到r中有多少 数是无法被这个区间 任意一个数整除的。
做法:
转换种思想就是 某个数num[i],在多少个区间内 可以不被区间其他任何数整除。 答案加上区间个数。
所以 可以左右两边枚举过来。
以左边枚举过来为例:
把最近出现的数 记录下来,记录到 has数组。 如num[i] 记录成has[num[i]]=i
然后把每个数的因子枚举,判断最近左边出现因子在哪。 然后那个位子+1 就是左端点了。
在同样处理出右端点, 左右端点知道就很容易算出num[i]在多少区间内符合要求 加到ans里。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<stdlib.h>
#include<map>
#include<vector>
using namespace std;
#define N 100006
#define M 10006
#define MOD 1000000007
int n;
int vis[M];
int a[N];
vector<int> G[M];
int L[N];
int R[N];
void init(){
for(int i=;i<M;i++){
for(int j=;j<=i;j++){
if(i%j==){
G[i].push_back(j);
}
}
}
}
int main()
{
init();
while(scanf("%d",&n)==){
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
memset(vis,,sizeof(vis));
memset(L,-,sizeof(L));
memset(R,-,sizeof(R));
for(int i=;i<=n;i++){
for(int j=;j<G[a[i]].size();j++){
int tmp=G[a[i]][j];
if(vis[tmp]){
if(a[i]%tmp==){
if(L[i]!=-){
L[i]=max(L[i],vis[tmp]+);
}
else{
L[i]=vis[tmp]+;
}
} }
}
vis[a[i]]=i;
}
memset(vis,,sizeof(vis));
for(int i=n;i>=;i--){
for(int j=;j<G[a[i]].size();j++){
int tmp=G[a[i]][j];
if(vis[tmp]){
if(a[i]%tmp==){
if(R[i]!=-){
R[i]=min(R[i],vis[tmp]-);
}
else{
R[i]=vis[tmp]-;
}
} }
}
vis[a[i]]=i;
}
int ans=;
for(int i=;i<=n;i++){
if(L[i]==-){
L[i]=;
}
if(R[i]==-){
R[i]=n;
}
}
for(int i=;i<=n;i++){
ans=(ans+(i-L[i]+)*(R[i]-i+))%MOD;
}
printf("%d\n",ans);
}
return ;
}
hdu 5288 OO’s Sequence(计数)的更多相关文章
- HDU 5288 OO’s Sequence [数学]
HDU 5288 OO’s Sequence http://acm.hdu.edu.cn/showproblem.php?pid=5288 OO has got a array A of size ...
- HDU 5288 OO‘s sequence (技巧)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5288 题面: OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- HDU 5288 OO’s Sequence 水题
OO's Sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5288 Description OO has got a array A ...
- HDU 5288——OO’s Sequence——————【技巧题】
OO’s Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- Hdu 5288 OO’s Sequence 2015多小联赛A题
OO's Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- hdu 5288 OO’s Sequence(2015多校第一场第1题)枚举因子
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5288 题意:在闭区间[l,r]内有一个数a[i],a[i]不能整除 除去自身以外的其他的数,f(l,r ...
- hdu 5288 OO’s Sequence 枚举+二分
Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number o ...
- HDU 5288 OO’s Sequence
题意:给一个序列,函数f(l, r)表示在[l, r]区间内有多少数字不是其他数字的倍数,求所有区间的f(l, r)之和. 解法:第一次打多校……心里还有点小激动……然而一道签到题做了俩点……呜呜呜… ...
随机推荐
- 在 IIS 上创建 FTP 站点
微软参考文档: 在 IIS 上生成 FTP 站点 主要过程: 1.控制面板 -> 程序 -> 启动或关闭Windows功能 -> 将Internet Information Serv ...
- Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...
- Java学习笔记——IO操作之对象序列化及反序列化
对象序列化的概念 对象序列化使得一个程序可以把一个完整的对象写到一个字节流里面:其逆过程则是从一个字节流里面读出一个事先存储在里面的完整的对象,称为对象的反序列化. 将一个对象保存到永久存储设备上称为 ...
- exec与xargs区别
区别描述: 两者都是对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令. -exec:{}表示命令的参数即为所找到的文件,以:表示comman命令的结束.\是转义符,因为分号在 ...
- 用JS的for循环打印九九乘法表
需要使用两个for循环嵌套,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- javascript-Blob文件对象
一个Blob对象就是一个包含有只读原始数据的类文件对象.Blob对象中的数据并不一定得是JavaScript中的原生形式.File接口基于Blob,继承了Blob的功能,并且扩展支持了用户计算机上的本 ...
- 用C#代码控制水晶报表中的对象
在C#代码中调用水晶报表的各个对象:字段对象:FieldObject obj=(FieldObject)oRpt.ReportDefinition.ReportObjects["FieldO ...
- poj3273 二分
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21448 Accepted: 8429 ...
- hdu 1282 回文数猜想
Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其 ...
- QWidget使用qss样式的background-image属性
最近在学习Qt使用QSS样式美化窗口部件的内容.发现在对QWidget应用background-image改变窗口背景图片时,QWidget的窗口背景并未生效.工程建立如下: 1.新建 Qt A ...