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 ...
随机推荐
- LeetCode_18 4Sum
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...
- 洛谷——P4296 [AHOI2007]密码箱
P4296 [AHOI2007]密码箱 密码x大于等于0,且小于n,而x的平方除以n,得到的余数为1. 求这个密码,$1<=n<=2,000,000,000$ 暴力枚举,数据有点儿水$O( ...
- UVA 674 Coin Change (完全背包)
解法 dp表示目前的种数,要全部装满所以f[0]=1其余为0的初始化是必不可少的 代码 #include <bits/stdc++.h> using namespace std; int ...
- Python-函数和代码复用
函数的定义与使用 >函数的理解与定义 函数是一段代码的表示 -函数是一段具有特定功能的.可重用的语句组 -函数是一种功能的抽象,一般函数表达特定功能 -两个作用:降低编程难度 和 代码复用 de ...
- react入门----(this.state/表单/Ajax)
1.this.state 组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI var TestStat ...
- 洛谷 4768 LOJ 2718「NOI2018」归程
[题解] 本题有多种做法,例如可持久化并查集.kruskal重构树等. kruskal重构树的做法是这样的:先把边按照海拔h从大到小的顺序排序,然后跑kruskal建立海拔的最大生成树,顺便建krus ...
- 【Codeforces 1063B】Labyrinth
[链接] 我是链接,点我呀:) [题意] 你可以往左最多x次,往右最多y次 问你从x,y出发最多能到达多少个格子 只能往上下左右四个方向走到没有障碍的格子 [题解] 假设我们从(r,c)出发想要到固定 ...
- 九度oj 题目1059:abc
题目1059:abc 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4510 解决:3546 题目描述: 设a.b.c均是0到9之间的数字,abc.bcc是两个三位数,且有:abc+bcc ...
- [K/3Cloud]DBServiceHelper.ExecuteDataSet(this.Context, sql)) 返回数据问题
例如下面代码: int sQty = 0; string sql = string.Format(@" Select FMATERIALID ,FBASEUNITID ,FAUXPROPID ...
- [poj3537]Crosses and Crosses_博弈论
Crosses and Crosses poj-3537 题目大意:给定一个1*n的网格,每次往格子内填一个$\times$,连续的三个即可获胜. 注释:$1\le n\le 2000$. 想法:我们 ...