HDU5288 OO’s Sequence(暴力枚举)
来源:互联网 发布:井泵电机数据 编辑:程序博客网 时间:2024/05/21 08:45
OO’s Sequence
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 644 Accepted Submission(s): 241
Problem Description
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 (109+7).
Input
There are multiple test cases. Please process till EOF.
In each test case:
First line: an integer n(n<=10^5) indicating the size of array
Second line:contain n numbers ai(0<ai<=10000)
In each test case:
First line: an integer n(n<=10^5) indicating the size of array
Second line:contain n numbers ai(0<ai<=10000)
Output
For each tests: ouput a line contain a number ans.
Sample Input
51 2 3 4 5
Sample Output
23
Source
2015 Multi-University Training Contest 1
题目大意:定义一个函数f(l,r)是i(l<=i<=r)的取值个数,使得对任意的j(l<=j<=r且j!=i)都有ai/aj!=0。
解题思路:
例如样例:1 2 3 4 5
当i=1时,1是1的因数,2不是1的因数,3不是1的因数,4不是1的因数,5不是1的因数,虽然1是1的因数,但是j!=i,因此,在区间(1,1),(1,2),(1,3),(1,4),(1,5)上,i=1都是一个解。
当i=2时,1是2的因数,2是2的因数,3不是2的因数,4不是2的因数,5不是2的因数,虽然2是2的因数,但是j!=i,因此,在区间(2,2),(2,3),(2,4),(2,5)上,i=2都是一个解。
当i=3时,1是3的因数,2不是3的因数,3是3的因数,4不是3的因数,5不是3的因数,虽然3是3的因数,但是j!=i,因此,在区间(2,3),(2,4),(2,5),(3,3),(3,4),(3,5)上,i=3都是一个解。
当i=4时,1是4的因数,2是4的因数,3不是4的因数,4是4的因数,5不是4的因数,虽然4是4的因数,但是j!=i,因此,在区间(3,4),(3,5),(4,4),(4,5)上,i=4都是一个解。
当i=5时,1是5的因数,2不是5的因数,3不是5的因数,4不是5的因数,5是5的因数,虽然5是5的因数,但是j!=i,因此,在区间(2,5),(3,5),(4,5),(5,5)上,i=5都是一个解。
我们会发现,当i是解时,则包含i的区间最大为i左边离它最近的因子的位置left[i]到i右边离它最近的因子的位置righ[i]。那么这个区间所包含的区间并且包含i的区间都是符合题目的。一共有(i-lef[i])*(righ[i]-i)个。把所有的i相加即可。
接下来如何寻找left[i]和righ[i],如果每一次都是遍历一遍数组,显然会T的。
因为题目给出的ai的取值范围是(0<ai<=10000),所有预处理出10000以内的每一个数在10000以内的因子。然后标记每一个i的左边和右边离它最近的它的因子的位置。
AC代码如下:
#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <ctime>#include <iostream>#include <algorithm>#include <string>#include <vector>#include <deque>#include <list>#include <set>#include <map>#include <stack>#include <queue>#include <numeric>#include <iomanip>#include <bitset>#include <sstream>#include <fstream>#include <limits.h>#define debug "output for debug\n"#define pi (acos(-1.0))#define eps (1e-4)#define inf (1<<28)#define sqr(x) (x) * (x)using namespace std;typedef long long ll;typedef unsigned long long ULL;#define mod 1000000007#define maxn 100010vector<int> divisor[maxn];//10000以内divisor[i]的所有因子int position[maxn];//位置int num[maxn];//数aiint lef[maxn];//左因子的最大位置int righ[maxn];//右因子的最大位置int main(){ int i,j,k,n; //预处理,得到10000以内的每一个数的10000以内的因子 for(i=1;i<= 10000;i++) { divisor[i].clear();// for(j=1;j*j<=i;j++) { if(i%j==0)//数i的10000以内的所有因子 { divisor[i].push_back(j); divisor[i].push_back(i/j); } } } while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&num[i]); memset(position,0,sizeof(position)); //寻找第i个数左边离它最近的因子的位置(逐步更新第i个数左边因子的位置(初始均为0)) for(i=1;i<=n;i++) { int u=num[i]; int p=0; for(j=0;j<divisor[u].size();j++)//寻找第i个数左边离它最近的因子的位置p p=max(p,position[divisor[u][j]]); lef[i]=p;//记录位置p //printf("%d ",p); position[u]=i;//更新第i个数左边因子的位置 } memset(position,0x3f,sizeof(position)); //寻找第i个数左边离它最近的因子的位置(逐步更新第i个数左边因子的位置(初始均为0)) for(i=n;i>0;i--) { int u=num[i]; int p=n+1; for(j=0;j<divisor[u].size();j++) p=min(p,position[divisor[u][j]]); righ[i]=p; //printf("%d ",p); position[u]=i; } long long ans=0,l,r; for(i=1;i<=n;i++) { ans+=(long long)(i-lef[i])*(righ[i]-i); ans%=mod; } printf("%ld\n",ans); } return 0;}
0 0
- HDU5288 OO’s Sequence(暴力枚举)
- HDU5288 OO’s Sequence
- HDU5288 OO’s Sequence
- hdu5288 OO’s Sequence
- HDU5288:OO’s Sequence(思维)
- 搜索 - hdu5288 OO’s Sequence
- HDU5288 OO’s Sequence 二分
- [杂题] HDU5288: OO’s Sequence
- HDU5288.OO’s Sequence(多校第一题)
- hdu5288(2015多校1)OO’s Sequence
- 解题报告 之 HDU5288 OO' s Sequence
- HDU 5288 OO’s Sequence (暴力枚举因子)
- HDU5288 OO’s Sequence(序列的整除对数计数) 多校赛1最水题
- 2015年多校联合训练第一场OO’s Sequence(hdu5288)
- hdu5288 OO’s Sequence 二分 多校联合第一场
- 2015 Multi-University Training Contest 1 Hdu5288 OO’s Sequence
- hdu5288 OO’s Sequence(质因子分解+二分)
- 2015 Multi-University Training Contest 1OO’s Sequence hdu5288
- Copy,mutableCopy和retain的区别的小理解
- 网络拓扑
- 013.package 访问控制符
- weblogic宕机crash问题解决分享
- 第一篇 七月二十一
- HDU5288 OO’s Sequence(暴力枚举)
- HDU5294 Tricks Device(最大流+SPFA) 2015 Multi-University Training Contest 1
- NSFileManager和文件的判断操作、获取目录、文件创建和目录创建。
- 策略模式
- BFS和队列例题
- 子线程和主线程的通信问题
- Linux kernel 分析之七:内核启动-链接脚本
- UIButton 个人学习总结 (二)
- 【安卓基础三】adb命令