hdu 5228 OO’s Sequence(单独取数算贡献)
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)
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#define MOD 1000000007
using namespace std;
int a[];
int l[];//记录每个数的左边最接近得可整除的数的位置
int r[];//记录每个数的右边最接近得可整除的数的位置
int mp[];//记录之前出现过的数,判断是否是整除的数的标记数组,存的是那个数的位置
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
memset(mp,,sizeof(mp));
for(int i=;i<=n;i++)//找左边最接近的数
{
l[i]=;
for(int j=;j*j<=a[i];j++)//判断这个数是否被整除,取到根号就好
{
if(a[i]%j==)
{
if(mp[j]) l[i]=max(mp[j],l[i]);
if(mp[a[i]/j]) l[i]=max(mp[a[i]/j],l[i]);//这个是以根号为界限的右边的因子数,自己推导一下
}
}
mp[a[i]]=i;//出现过的数记录一下
}
memset(mp,,sizeof(mp));
for(int i=n;i>=;i--)找右边最接近的数
{
r[i]=n+;
for(int j=;j*j<=a[i];j++)
{
if(a[i]%j==)
{
if(mp[j]) r[i]=min(mp[j],r[i]);
if(mp[a[i]/j]) r[i]=min(mp[a[i]/j],r[i]);
}
}
mp[a[i]]=i;
}
long long sum=;
for(int i=;i<=n;i++)
{
sum+=(i-l[i])*(r[i]-i);//公式算每个数的贡献区间个数多少
}
printf("%lld\n",sum%MOD);
}
}
我个人觉得比赛的时候要有能力分清这个是否是一个求贡献的题目,下面讲下个人理解,我觉得如果一件事必须要这个成员参与
,而且有很多这类的的事,并且题目是要求每个个数之和之类的就是求贡献题
也是个人一些推断,希望对你们有用,
下面最后说一句,搞acm的小菜鸡绝不服输>_<`
hdu 5228 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 2167 状压dp方格取数
题意:给出一个数表,规定取出一个数后周围的八个数都不可取,求可获得的最大数字和 思路:状态压缩dp,每一行的取数方法为状态,显然,由于取数规则的限制,可取的状态并不是 1<<size_co ...
- 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(计数)
Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number o ...
随机推荐
- G711编解码
http://blog.csdn.net/rightorwrong/article/details/4209467 搞语音对讲几天了,播放时声音干扰太大了.拖得时间久有两个原因: 1.每次采样的位数这 ...
- CF1114E Arithmetic Progression
给定一个打乱的等差数列,每次两种操作. 1.查询一个位置. 2.查询是否有比x大的数字. 一共60次操作. sol: 30次操作即可二分出首项. 剩下30次操作查询出30个位置然后两两做差取gcd即可 ...
- 「THUWC 2017」在美妙的数学王国中畅游
这个题目很明显在暗示你要用泰勒展开. 直接套上去泰勒展开的式子,精度的话保留12项左右即可. 分别维护每一项的和,可能比较难写吧. 然后强行套一个LCT就没了.
- Integer to English words leetcode java
问题描述: Convert a non-negative integer to its english words representation. Given input is guaranteed ...
- JDBC MVC框架实现用户登录
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写 1.实体entity package com.uplooking. ...
- python-跨域问题
跨域:因为浏览器的同源策略,在你请求返回的时候会进行拦截 jsonp 只能发 get 请求 cors 可以发任何请求 ,在响应时加个响应头就行 同源策略对ajax阻拦 同源策略对src或href属性的 ...
- Leetcode 1022. 可被 K 整除的最小整数
1022. 可被 K 整除的最小整数 显示英文描述 我的提交返回竞赛 用户通过次数74 用户尝试次数262 通过次数75 提交次数1115 题目难度Medium 给定正整数 K,你需要找出可以被 ...
- Leetcode 980. 不同路径 III
980. 不同路径 III 显示英文描述 我的提交返回竞赛 用户通过次数42 用户尝试次数43 通过次数46 提交次数60 题目难度Hard 在二维网格 grid 上,有 4 种类型的方格: 1 ...
- 78. Subsets C++回溯法
本题还是基本的回溯法.就是回溯函数的参数选择上要花点心思! class Solution { public: void backTrack(vector<int> ans, vector& ...
- 基本数据类型list,tuple
一. 列表 1. 列表是一个可变的数据类型 列表由[]来表示, 每一项元素使用逗号隔开. 列表什么都能装. 能装对象的对象. 列表可以装大量的数据 列表是有序的 2. 列表的索引和切片 列表和字符串一 ...