9.10NOIP模拟题
9.10 NOIP模拟赛
题目名称 |
区间 |
种类 |
风见幽香 |
题目类型 |
传统 |
传统 |
传统 |
可执行文件名 |
section |
kinds |
yuuka |
输入文件名 |
section.in |
kinds.in |
yuuka.in |
输出文件名 |
section.out |
kinds.out |
yuuka.out |
每个测试点时限 |
1.0秒 |
6.0秒 |
1.0秒 |
内存限制 |
256 MB |
512 MB |
128 MB |
测试点数目 |
25 |
25 |
25 |
每个测试点分值 |
4 |
4 |
4 |
区间
Description
Hkd有一个长度为n的数列,元素互不相同。
Hkd一天走在路上捡到了一个数d。
Hkd很高兴,以为d恰好是她的数列中的数。
Hkd很天真的想知道她拥有的排列中,满足以下条件的区间的个数
1. 区间长度为奇数
2将区间元素排序后中间的数是d
Input
第一行输入两个整数n,d。
接下来一行n个整数为Hkd拥有的数列。
Output
输出一行表示答案
Example
Sample input 1
7 4
5 7 2 4 3 1 6
Sample output 1
4
/*
对于一个合法的区间,其比中位数p大的数的个数是等于比中位数p小的数的个数的。
那么记大于p的数为1,小于p的数为-1,等于p的数为0,对这个做一个前缀和,
并统计一下每个前缀和出现的次数,顺便维护一下中位数p的位置就好了。
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 200005
#define ll long long using namespace std;
int a[N],b[N];
int n,m,x,ans,p; const int BUF=;char Buf[BUF],*buf=Buf;
inline void read(int &now)
{
for(now=;!isdigit (*buf);++buf);
for(;isdigit(*buf);now=now*+*buf-'',++buf);
} int main()
{
freopen("section.in","r",stdin);
freopen("section.out","w",stdout);
fread(buf,,BUF,stdin);
read(n);read(m);
for(int i=;i<=n;i++)
{
read(x);
if(x<m)b[i]=-;
if(x==m) b[i]=,p=i;
if(x>m) b[i]=;
b[i]+=b[i-];
}
for(int i=;i<p;i++) a[b[i]+n]++;
for(int i=p;i<=n;i++) ans+=a[b[i]+n];
printf("%d\n",ans);
return ;
}
种类
Description
Hkd的数列有n个数。
数列中的第i个数可以取中的随便一个值。
然后hkd有一个很神奇的法宝--S;
S=S_的种类数
Input
第一行一个数n。
接下来n行每行两个数
Output
输出一行一个数表示答案。
Example
Sample input 1
5
1 2
2 3
3 4
4 5
5 6
Sample output 1
26
Hint
/*
每个数的范围只有[1,100]同时最多只有100个数,所以S_的值最多有1000000个
然后的n^5方程很容易想到
表示前i个数能否得出和为j的数
然后我们惊奇的发现这个方程可以用bitset优化于是我们的时间复杂度变成了n^5/128。
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<bitset> #define N 1000001 using namespace std; bitset<N>dp[];
int n,ai[],bi[]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("kinds.in","r",stdin);
freopen("kinds.out","w",stdout);
n=read();dp[]^=;
for(int i=;i<=n;i++)
{
ai[i]=read(),bi[i]=read();
for(int v=ai[i];v<=bi[i];v++) dp[i]|=dp[i-]<<(v*v);
}
cout<<dp[n].count();
return ;
}
风见幽香
Description
幽香是幻想乡中的一个很萌的妹子,是一个1.3k岁的少女(雾),某天,幽香正呆在自己的花田中赏花,突然一大波油库里从花田上空飞过,幽香感到一阵烦躁,她打算把它们打下来当花肥。
每个油库里都有两个属性,营养值和倍率。
整个天空可以抽象的看做是一个二维的平面直角坐标系,每个油库里可以看做是坐标系中的一个点。
幽香的攻击方式为用她的伞发出魔炮,具体的,魔炮可以看做是一个无限长的平行四边形,可以看做是两条倾斜角度为k的平行线夹得的区域,平行线间的距离是任意的,如下图所示。
。
理论上每次在攻击范围之中的油库里都会被击落,变成花肥,在魔炮边界上的油库里也会被击落,也就是从坐标系中消失,每次攻击后可以得到的营养值为其中S表示此次攻击击落的油库里的集合,|S|表示集合的元素个数,即此次攻击击中的每一个油库里的营养值乘以此次所有被击落的油库里倍率的平均值。
幽香会使用若干次魔炮,直至击落所有的油库里,且任意两次攻击范围不会重叠,最后得到的营养值为每次攻击得到的营养值之和。现在幽香想要知道在击落所有的油库里后,她总共能获得多少营养值。若是你不会的话....哼哼,她可是会把你做成花肥了啊。
Input
第1行,1个整数N,表示油库里个数。
第2...N+1行,每行四个整数x,y,v,c,表示油库里的坐标(x,y),以及v和c。
第N+2行:1个整数k,表示倾斜角角度,0°到180°。
Output
输出一行,为最大营养值(保留3位小数)(你的答案必须与标准输出完全一样)。
Example
Sample input 1
3
1 3 3 1
2 1 2 2
3 4 2 1
45
Sample output 1
9.333
/*
考虑以下事实,攻击的范围是两条固定斜率的直线夹得的区域,
那么,直角坐标系中的每个点就有都有了一个固定的斜率,
所以每个点所在的直线也就能随之确定下来,那么我们按照每个点所在直线的纵截距排序,
那么问题就转变为了区间里的问题。
所以考虑区间dp,设dp[i]为第i条直线之前的所有价值。
需要前缀和优化
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm> #define N 2017
#define phi 3.1415926 using namespace std;
double f[N],sc[N],sv[N];
int n,s[N];
double ans,k;
struct node
{
double x,y;
double v,c,b;
}a[N]; inline bool cmp(node a,node b){return a.b<b.b;}
inline double max(double a,double b){return a>b?a:b;} int main()
{
freopen("yuuka.in","r",stdin);
freopen("yuuka.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%lf%lf%lf%lf",&a[i].x,&a[i].y,&a[i].v,&a[i].c);
if(k==||k==) k=;
scanf("%lf",&k);k=tan(k/*phi); for(int i=;i<=n;i++)
a[i].b=a[i].y-a[i].x*k;
sort(a+,a+n+,cmp);
int pos=;s[]=pos;sc[]=a[].c;sv[]=a[].v;
for(int i=;i<=n;i++)
{
if(a[i].b!=a[i-].b)
pos++,s[i]=s[i-],sc[i]=sc[i-],sv[i]=sv[i-];
++s[i];sc[i]+=a[i].c;sv[i]+=a[i].v;
} for(int i=;i<=pos;i++)
{
f[i]=sv[i]*sc[i]/s[i];
for(int j=;j<i;j++)
f[i]=max(f[i],f[j]+(sv[i]-sv[j])*(sc[i]-sc[j])/(s[i]-s[j]));
}
printf("%.3lf",f[n]);
fclose(stdin);fclose(stdout);
return ;
}
9.10NOIP模拟题的更多相关文章
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- poj 1888 Crossword Answers 模拟题
Crossword Answers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 869 Accepted: 405 D ...
- CodeForces - 427B (模拟题)
Prison Transfer Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Sub ...
- sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
The Android University ACM Team Selection Contest Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里 ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
- UVALive 4222 Dance 模拟题
Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...
- cdoj 25 点球大战(penalty) 模拟题
点球大战(penalty) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/2 ...
- Educational Codeforces Round 2 A. Extract Numbers 模拟题
A. Extract Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/pr ...
- URAL 2046 A - The First Day at School 模拟题
A - The First Day at SchoolTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...
随机推荐
- [Algorithm] 5. Kth Largest Element
Description Find K-th largest element in an array. Example In array [9,3,2,4,8], the 3rd largest ele ...
- centos7+VMware Workstation创建共享文件夹
1.第一步设置宿主机共享文件夹路径 2.挂载VMware Tools,如下操作会将tools以光盘挂载点的方式进入到系统中. 3.centos7 挂载存有VMware Tools的光盘并进行安装 1) ...
- Python函数: any()和all()的用法
版权声明:本文为博主原创文章,未经允许不得转载 引子 平常的文本处理工作中,我经常会遇到这么一种情况:用python判断一个string是否包含一个list里的元素. 这时候使用python的内置函数 ...
- python virtualenv 虚拟环境的应用
为什么要使用python的虚拟环境呢?: 首先我们来说不实用虚拟环境的情况: 在Python应用程序开发的过程中,系统安装的Python3只有一个版本:3.7.所有第三方的包都会被pip3安装到 ...
- PAT 1129 Recommendation System
Recommendation system predicts the preference that a user would give to an item. Now you are asked t ...
- PAT 1125 Chain the Ropes
Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fo ...
- shrink&split
shrink将分片数按因子缩减.hard link segment文件.因缩减前后hash一致,不需要rehash.如:0 ,1 , 2, 3, 4, 5, 6, 7, 8.9个分片缩减成3个:0 [ ...
- maven profile多环境自动切换配置,配置分离,排除文件
痛点: 在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环境对项目的需求也不相同. 在此之前,我们往往需要手动去修改相对应的配置文件然后打成war,才能部 ...
- mongo实践-透过js shell操作mongo
mongo实践-通过js shell操作mongo 保存命令: j={name:"wangjingjing",age:15} db.user.save(j); 查询命令: var ...
- HDU 2604 矩阵快速幂
题目大意 给定长度为l的只有f,m两种字母 的序列,问不出现fff,fmf的序列个数有多少个 每次的下一个状态都与前一次状态的后两个字母有关 比如我令mm : 0 , mf : 1 , fm : 2 ...