2015 Multi-University Training Contest 1
最近真是太废柴了,题没做几道,也没学什么新知识,多校做了三场也没总结~诶!好好学吧!
多校第一场感觉被完虐...orz...
Hdu 5288 OO’s Sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5288
题意:
f(l,r)表示满足ai%aj≠0的i的个数(i∈[l,r],j∈[l,r],j≠i)
已知n个数 a1,a2,…an,求
思路:这个题实质是对于一个包含ai的区间,如果ai符合上述条件,即对于aj,ai%aj≠0,则aj不是ai的因子
对于每一个数ai,分别向左向右去找离它最近的因子的下标L[i],R[i],ans+=(i-L[i])*(R[i]-i);
参考代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
const int N=;
#define Mod 1000000007
using namespace std;
int a[N+],id[N+],L[N+],R[N+];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<=n; i++)
scanf("%d",&a[i]);
memset(id,,sizeof(id));
for(int i=; i<=n; i++) //向左找最近的因子下标
{
L[i]=;
for(int j=; j*j<=a[i]; j++)
if(a[i]%j==) //j和a[i]/j都为a[i]的因子
{
if(id[j])
L[i]=max(L[i],id[j]); //取最大的下标即为最近的
if(id[a[i]/j])
L[i]=max(L[i],id[a[i]/j]);
}
id[a[i]]=i; //记录a[i]的下标
}
memset(id,,sizeof(id));
for(int i=n; i>=; i--) //向右找最近的因子下标
{
R[i]=n+;
for(int j=; j*j<=a[i]; j++)
if(a[i]%j==)
{
if(id[j])
R[i]=min(R[i],id[j]);
if(id[a[i]/j])
R[i]=min(R[i],id[a[i]/j]);
}
id[a[i]]=i;
}
long long ans=;
for(int i=; i<=n; i++)
ans=(ans+(long long)(i-L[i])*(R[i]-i)%Mod)%Mod;
printf("%I64d\n",ans);
}
return ;
}
Assignment
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289
题意: 求有多少个区间满足区间内任意两个数的差值小于k
思路: 区间内最大差值为区间内最大值与最小值的差,只要其差满足条件,
则该区间符合条件左区间l先固定,去找最大区间符合条件,即[l,r-1]符合,
那么ans+=((r−l)/2)+r−l,然后r不变,l不断加1,直到找到符合条件的 [l,r]为止,
那么[l,j-1]会被重复算,需要减掉.
为了更快的查询每个区间的最大最小值,用线段树实现
参考代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; #define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define MID(a,b) (a+((b-a)>>1))
const int N=;
#define INF (1<<30)
struct node
{
int lft,rht;
int maxm;
int minm;
int mid()
{
return MID(lft,rht);
}
};
struct Segtree
{
node tree[N*];
void build(int lft,int rht,int rt)
{
tree[rt].lft=lft;
tree[rt].rht=rht;
tree[rt].maxm=-INF;
tree[rt].minm=INF;
if(lft==rht)
{
scanf("%d",&tree[rt].minm);
tree[rt].maxm=tree[rt].minm;
}
else
{
int mid=tree[rt].mid();
build(lft,mid,LL(rt));
build(mid+,rht,RR(rt));
tree[rt].maxm=max(tree[LL(rt)].maxm,tree[RR(rt)].maxm);
tree[rt].minm=min(tree[LL(rt)].minm,tree[RR(rt)].minm);
}
}
int querymaxm(int st,int ed,int rt)
{
int lft=tree[rt].lft,rht=tree[rt].rht;
if(st<=lft&&rht<=ed)
return tree[rt].maxm;
else
{
int mid=tree[rt].mid();
int sum1=-INF,sum2=-INF;
if(st<=mid)
sum1=querymaxm(st,ed,LL(rt));
if(ed>mid)
sum2=querymaxm(st,ed,RR(rt));
return max(sum1,sum2);
}
}
int queryminm(int st,int ed,int rt)
{
int lft=tree[rt].lft,rht=tree[rt].rht;
if(st<=lft&&rht<=ed)
return tree[rt].minm;
else
{
int mid=tree[rt].mid();
int sum1=INF,sum2=INF;
if(st<=mid)
sum1=queryminm(st,ed,LL(rt));
if(ed>mid)
sum2=queryminm(st,ed,RR(rt));
return min(sum1,sum2);
}
}
} seg;
__int64 f(__int64 n)
{
if(n%)
{
return (n-)/*n;
}
return n/*(n-);
}
int main()
{
int T;
int i,j;
int n,k;
scanf("%d",&T);
while(T--)
{
__int64 sum=;
scanf("%d%d",&n,&k);
seg.build(,n,);
i=;
j=;
while(i<=n&&j<=n)
{
int ma=seg.querymaxm(i,j,);
int mi=seg.queryminm(i,j,);
if((ma-mi)>=k)
{
sum+=(j-i)+f(j-i);
i++;
for(; i<j; i++)
{
if((seg.querymaxm(i,j,)-seg.queryminm(i,j,))<k)
{
sum-=(j-i)+f(j-i);
j++;
break;
}
}
}
else
{
if(j==n)
sum+=(j-i+)+f(j-i+);
j++;
}
}
printf("%I64d\n",sum);
}
return ;
}
2015 Multi-University Training Contest 1的更多相关文章
- 2015 Multi-University Training Contest 8 hdu 5390 tree
tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...
- 2015 UESTC Winter Training #8【The 2011 Rocky Mountain Regional Contest】
2015 UESTC Winter Training #8 The 2011 Rocky Mountain Regional Contest Regionals 2011 >> North ...
- 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】
2015 UESTC Winter Training #7 2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest 据 ...
- Root(hdu5777+扩展欧几里得+原根)2015 Multi-University Training Contest 7
Root Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Su ...
- 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)
官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...
- HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6
Hiking Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- HDU5294 Tricks Device(最大流+SPFA) 2015 Multi-University Training Contest 1
Tricks Device Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)
CRB and Tree Time Limit: 8000/4000 MS (J ...
- 2015多校联合训练赛 hdu 5308 I Wanna Become A 24-Point Master 2015 Multi-University Training Contest 2 构造题
I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 ...
随机推荐
- (Problem 9)Special Pythagorean triplet
A Pythagorean triplet is a set of three natural numbers, a b c, for which, a2 + b2 = c2 For exampl ...
- 关于DataGridViewComboBoxCell修改后提交数据源
最近在项目遇到一个功能实现.是在DataGridView中DataGridViewComboboxColumn列绑定数据源, DisplayMember为数据表的Name列,ValueMember是数 ...
- BZOJ 3359: [Usaco2004 Jan]矩形( dp )
数据范围这么小..怎么乱搞都可以吧... 先排序一遍然后O(n²) dp --------------------------------------------------------------- ...
- Swift中的ViewController
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- java Native 方法
一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非j ...
- js中exec、test、match、search、replace、split、indesOf()用法
exec:对string进行正则处理,并返回匹配结果.array[0]为原字符串,array[i]为匹配在整个被搜索字符串中的位置. test:测试string是否包含有匹配结果,包含返回true,不 ...
- Orleans-Hello World
Orleans-Hello World http://www.rm5u.com/orleans/orleans-intro.html 什么是Orleans? Orleans(奥尔良) ...
- Orleans is a framework
Introduction Orleans is a framework that provides a straightforward approach to building distributed ...
- Windows Phone 8初学者开发—第22部分:用演示图板创建卷盘的动画
原文 Windows Phone 8初学者开发—第22部分:用演示图板创建卷盘的动画 第22部分: 用演示图板创建卷盘的动画 原文地址:http://channel9.msdn.com/Series/ ...
- docker学习笔记3:镜像操作(查找和下载)
一.查看本地镜像 只有下载后,镜像才会保存在本地(docker环境所在的主机),通过如下命令可以查看本地已经存在的镜像. 命令:dokcer images 上面命令列出本地所有已经存在的镜像,显示的信 ...