hdu 5288 OO’s Sequence 2015 Multi-University Training Contest 1
来源:互联网 发布:靠谱韩代淘宝 豆瓣 编辑:程序博客网 时间:2024/06/06 08:38
OO’s Sequence
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 83 Accepted Submission(s): 34
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
求一个每个区间中,满足其他数字%该数字 != 0的数字个数,把每个区间满足条件的个数相加
方法:
枚举每个位置,求包含这个数字的区间个数,做加法。
对于ai,看ai左边最近的位置l,al是ai的因数,右边位置r,ar是ai的因数。那么满足的个数就是
(i-l)*(r-i)
预处理所有1-10000的因数。
从左到右,用pre[i]表示数字i出现的i的最右边的位置。算出每个位置的l。
同理从右到左,算出每个位置的r。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define maxn 100007vector<int> head[10007];int pre[10007];int num[maxn];int lef[maxn];int righ[maxn];int main(){ int n; for(int i = 1;i <= 10000;i++){ head[i].clear(); for(int j = 1;j*j<=i;j++){ if(i%j == 0){ head[i].push_back(j); head[i].push_back(i/j); } } } while(scanf("%d",&n)!=EOF){ for(int i = 1;i <= n; i++) scanf("%d",&num[i]); memset(pre,0,sizeof(pre)); for(int i = 1;i <= n; i++){ int u = num[i]; int p = 0; for(int j = 0;j < head[u].size(); j++) p = max(p,pre[head[u][j]]); lef[i] = p; pre[u] = i; } memset(pre,0x3f,sizeof(pre)); for(int i = n; i > 0; i--){ int u = num[i]; int p = n+1; for(int j = 0;j < head[u].size();j++) p = min(p,pre[head[u][j]]); righ[i] = p; pre[u] = i; } long long ans = 0,l,r; long long mod = 1000000007; for(int i = 1; i <= n; i++){ ans += (long long)(i-lef[i])*(righ[i]-i); ans %= mod; } cout<<ans<<endl; } return 0;}
0 0
- hdu 5288 OO’s Sequence 2015 Multi-University Training Contest 1
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
- hdu 5288 OO’s Sequence 2015 Multi-University Training Contest 1
- HDU 5288 OO’s Sequence (from: 2015 Multi-University Training Contest 1)
- HDU 5288 OO’s Sequence(数学)——2015 Multi-University Training Contest 1
- 2015 Multi-University Training Contest 1 Hdu5288 OO’s Sequence
- 2015 Multi-University Training Contest 1OO’s Sequence hdu5288
- 2015 Multi-University Training Contest 1 OO’s Sequence
- hdu 5289 OO’s Sequence 2015 Multi-University Training Contest 1
- 2015 Multi-University Training Contest 1 Hdu 5297 Y sequence
- 求助2015 Multi-University Training Contest 1_A(hdu 5288)
- hdu 5297 - Y sequence( 2015 Multi-University Training Contest 1)容斥原理
- hdu 4915 Parenthese sequence--2014 Multi-University Training Contest 5
- hdu 6047 Maximum Sequence(2017 Multi-University Training Contest
- hdu 5294 Tricks Device 2015 Multi-University Training Contest 1
- hdu 5289 Assignment 2015 Multi-University Training Contest 1
- 2015 Multi-University Training Contest 1 Hdu 5289 Assignment
- 2015 Multi-University Training Contest 1 Hdu 5292 Pocket Cube
- Ubuntu系统常用操作指令说明
- 那个青春
- 修改Velocity over Lifetime
- 关于如何改变thinkphp中自定义的成功界面、错误界面、异常界面
- HDOJ 5289 Assignment 单调队列
- hdu 5288 OO’s Sequence 2015 Multi-University Training Contest 1
- cocos2dx自学之 动作特效与场景切换特效
- Table View Controller注意事项
- A*算法——第二种
- 海量数据相似度计算之simhash短文本查找
- vmware装各种系统
- 6.对学生成绩进行统计计算,参加考试的有6名学生,考试成绩分别为94.5,89.0,79.5,64.5,81.5,73.5,显示考试的总分和平均分,之后显示大于考试平均分的成绩信息。请写出实现上述功能
- hdoj 4552 怪盗基德的挑战书 【KMP 求所有前缀在原串种出现的次数之和】
- Extjs-Grid-动态生成columns