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)之和. 解法:第一次打多校……心里还有点小激动……然而一道签到题做了俩点……呜呜呜… ...
随机推荐
- 企业生产环境中linux系统分区的几种方案
方案1:针对网站集群架构中的某个节点服务器分区 该服务器上的数据有多份(其他节点也有)且数据不太重要,建议分区方案如下: /boot: 200MB swap: 物理内存的1.5倍,当内存大于或等于8G ...
- 仿糯米弹框效果demo
代码例如以下: <!doctype html> <html lang="en"> <head> <meta charset="U ...
- java实验7-多线程编程
1 利用Thread和Runnable创建线程 [实验目的] (1)理解用实现Runnable接口的方法实现多线程. (2)掌握线程优先级的设置. (3)加深对线程状态转换的理解. [实验要求] 要求 ...
- ubuntu16.04 server安装小记
由于本人有一台闲置的thinkpad电脑,所以打算在上边安装一个ubuntu16.04 server版本,其中遇到主要问题,做一下记录: 安装过程中出现“ubuntu16.04 server64 bu ...
- RDLC报表上下标实现
例:m的6次方 ="M"&ChrW(8310) Character Name Character Num Entity Hex Entity Superscript Cha ...
- oracle启动,提示“LRM-00109: could not open parameter file”
转载自 http://blog.sina.com.cn/s/blog_53e731b70101liku.html oracle启动,提示“LRM-00109: could not open par ...
- ssh maven 搭建
数据库建表脚本不带,是很简单的一个表,把数据库环境搭建起来即可. 1.项目结构(Eclipse) 2.pom.xml <project xmlns="http://maven.apac ...
- BZOJ 2330 SCOI 2011 糖果
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...
- 重写String类,也有些区别,供参考
头文件如下: #pragma once #include <string> #include <string.h> #include <stdlib.h> #inc ...
- windows应用中调用DLL一步步试验
试验环境: PC:win10 build 10143 IDE: vs2015 RC WinPhone: win10 build 10136 简单界面,点按钮,算加法 一.主程用C++ 1.新建visu ...