第一题没做出来不应该;

第二题不难想,就是写起来很麻烦;

第三题因为学了挺久的splay就直接写的splay,没太在意常数问题,一般情况下,第k值问题主席树是比splay稍快的;

盘子序列

【题目描述】

有 n 个盘子。盘子被生产出来后,被按照某种顺序摞在一起。初始盘堆中如果一

个盘子比所有它上面的盘子都大,那么它是安全的,否则它是危险的。称初始盘堆为

A,另外有一个开始为空的盘堆 B。为了掩盖失误,生产商会对盘子序列做一些“处

理”,每次进行以下操作中的一个:(1)将 A 最上面的盘子放到 B 最上面;(2)将 B 最上

面的盘子给你。在得到所有n个盘子之后,你需要判断初始盘堆里是否有危险的盘子。

【输入格式】

输入文件包含多组数据(不超过 10 组)

每组数据的第一行为一个整数 n

接下来 n 个整数,第 i 个整数表示你收到的第 i 个盘子的大小

【输出格式】

对于每组数据,如果存在危险的盘子,输出”J”,否则输出”Y”

【样例输入】

3

2 1 3

3

3 1 2

【样例输出】

Y

J

【数据范围】

20%的数据保证 n<=8

80%的数据保证 n<=1,000

100%的数据保证 1<=n<=100,000,0<盘子大小<1,000,000,000 且互不相等

思路

倒序栈模拟;

代码实现

 #include<cstdio>
#include<cstring>
const int maxn=1e5+;
int n;
int a[maxn],b[maxn],bs,c[maxn],cs;
int main(){
freopen("disk.in","r",stdin);
freopen("disk.out","w",stdout);
while(scanf("%d",&n)!=EOF){
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=n;i>;i--){
if(!bs||b[bs]<a[i]) b[++bs]=a[i];
else while(bs&&b[bs]>a[i]) c[++cs]=b[bs--];
}
while(bs) c[++cs]=b[bs--];
for(bs=;bs<=n;bs++) if(c[bs]>c[bs-]) break;
if(bs>n) puts("Y");
else puts("J");
bs=cs=;
memset(b,,sizeof(b));
memset(c,,sizeof(c));
}
return ;
}

lazy的不想优化逻辑,时间十分充足了。

四轮车

【题目描述】

在地图上散落着 n 个车轮,小 J 想用它们造一辆车。要求如下:

1. 一辆车需要四个车轮,且四个车轮构成一个正方形

2. 车轮不能移动

你需要计算有多少种造车的方案(两个方案不同当且仅当所用车轮不全相同,坐

标相同的两个车轮视为不同车轮)。

【输入格式】

第一行一个整数 n

接下来 n 行,每行两个整数 x y,表示在(x,y)处有一个车轮

【输出格式】

一行一个整数,表示方案数

【样例输入】

9

0 0

1 0

2 0

0 2

1 2

2 2

0 1

1 1

2 1

【样例输出】

6

【数据范围】

30%的数据保证 n ≤ 30

100%的数据保证 1 ≤ n ≤ 1000;|x|,|y| < 20000

思路

枚举两个点确定图形各个点的位置;

对于地图上某个位置有多少车轮可以用map存;

题解给出的是hash坐标;

代码实现

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10010
using namespace std;
int n,ans[maxn],x1,x2,x3,x4,y1,y2,y3,y4,xx[maxn],yy[maxn],p1,p2;
struct node{int x,y;}P[maxn];
int cmp(const node &a,const node &b){return a.x<b.x;}
int Abs(int a){return a<?-a:a;}
void Add(){
ans[]++;
for(int i=;i<=ans[];i++) if(ans[i]>) ans[i]%=,ans[i+]++;
if(ans[ans[]+])ans[]++;
}
void Cal(int i,int j){
x1=xx[i],y1=yy[i],x2=xx[j],y2=yy[j];
int a=Abs(y1-y2),b=Abs(x1-x2);
int c=Abs(a-b);
if(c%) x3=x4=y3=y4=;
else{
c>>=;
if(a<b) x3=x1+c,y3=y2+c,x4=x2-c,y4=y1-c;
else x3=x1-c,y3=y2-c,x4=x2+c,y4=y1+c;
}
}
bool Judge(){
if(!x3&&!x4&&!y3&&!y4)return ;
int falg=,flag=;
p1=lower_bound(xx+,xx++n,x3)-xx;
p2=upper_bound(xx+,xx++n,x3)-xx;
for(int i=p1;i<p2;i++){
if(xx[i]!=x3) return ;
if(yy[i]==y3){falg=;break;}
}
p1=lower_bound(xx+,xx++n,x4)-xx;
p2=upper_bound(xx+,xx++n,x4)-xx;
for(int i=p1;i<p2;i++){
if(xx[i]!=x4) return ;
if(yy[i]==y4){flag=;break;}
}
return falg&&flag;
}
int main(){
freopen("car.in","r",stdin);
freopen("car.out","w",stdout);
scanf("%d",&n),ans[]=;
for(int i=;i<=n;i++) scanf("%d%d",&P[i].x,&P[i].y);
sort(P+,P++n,cmp);
for(int i=;i<=n;i++) xx[i]=P[i].x,yy[i]=P[i].y;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++){
if(yy[i]>=yy[j])continue;
Cal(i,j);
if(Judge()) Add();
}
for(int i=ans[];i>=;i--) printf("%d",ans[i]);
return ;
}

再次感谢峰峰学长!

点名

【题目描述】

在J班的体育课上,同学们常常会迟到几分钟,但体育老师的点名却一直很准时。

老师只关心同学的身高,他会依次询问当前最高的身高,次高的身高,第三高的身高,

等等。在询问的过程中,会不时地有人插进队伍里。你需要回答老师每次的询问。

【输入格式】

第一行两个整数 n m,表示先后有 n 个人进队,老师询问了 m 次

第二行 n 个整数,第 i 个数 Ai 表示第 i 个进入队伍的同学的身高为 Ai

第三行 m 个整数,第 j 个数 Bj 表示老师在第 Bj 个同学进入队伍后有一次询问

【输出格式】

m 行,每行一个整数,依次表示老师每次询问的答案。数据保证合法

【样例输入】

7 4

9 7 2 8 14 1 8

1 2 6 6

【样例输出】

9

9

7

8

【样例解释】

(9){No.1 = 9}; (9 7){No.2 = 9}; (9 7 2 8 14 1){No.3 = 7; No.4 = 8}

【数据范围】

40%的数据保证 n ≤ 1000

100%的数据保证 1 ≤ m ≤ n ≤ 30000;0 ≤ Ai < 232

思路

splay裸题,好吧我splay卡常数了;//好吧,我没过是因为没有离散化。。。这道题有写离散化,Spoj 10628. Count on a tree。

也可以用主席树来做,能过;

正解好像是双堆;

!int∈[-231,231]

代码实现

 #include<cstdio>
const long long maxn=3e5+;
long long n,m,a,b;
long long ss[maxn];
long long rt,hd;
long long t[maxn],f[maxn],sz[maxn],am[maxn],s[maxn][];
void rot(long long x){
long long y=f[x],z=f[y],l,r;
l=s[y][]==x?:,r=l^;
if(y==rt) rt=x;
else{
if(s[z][]==y) s[z][]=x;
else s[z][]=x;
}
f[x]=z,f[y]=x,f[s[x][r]]=y;
s[y][l]=s[x][r],s[x][r]=y;
sz[y]=sz[s[y][]]+sz[s[y][]]+am[y];
sz[x]=sz[s[x][]]+sz[s[x][]]+am[x];
}
void splay(long long x){while(x!=rt) rot(x);}
void ins(long long k,long long x,long long fa){
if(!rt){rt=++hd,t[rt]=x,sz[rt]=,am[rt]++;return;}
while(k) fa=k,++sz[k],k=s[k][x>t[k]];
k=s[fa][x>t[fa]]=++hd;
t[k]=x,sz[k]=,f[k]=fa,am[k]++;
splay(k);
}
long long find2(long long k,long long x){
if(x<=sz[s[k][]]) return find2(s[k][],x);
if(x==sz[s[k][]]+) return t[k];
return find2(s[k][],x-sz[s[k][]]-);
}
char r_w[],r_l;
long long read(long long &x){
while(r_w[]=getchar(),r_w[]<''||r_w[]>'');r_l=,x=;
while(r_w[r_l]=getchar(),r_w[r_l]>=''&&r_w[r_l]<='') r_l++;
for(long long i=;i<r_l;i++) x=x*+r_w[i]-'';
}
void write(long long x){
if(!x) return;
write(x/);
putchar(x%+'');
}
int main(){
freopen("rollcall.in","r",stdin);
freopen("rollcall.out","w",stdout);
read(n),read(m);
for(long long i=;i<=n;i++) read(ss[i]);
ins(rt,ss[],);
for(long long i=,j=;i<=m;i++){
read(a);
while(j<a) ins(rt,ss[++j],); b=find2(rt,i);
if(b) write(b);
else putchar('');
putchar('\n');
}
return ;
}

170611 NOIP模拟赛的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. PHP的包依赖管理工具Composer简介

    composer是一个基于项目的依赖管理器,负责将php项目的所依赖的包和库安装在项目的目录中,默认不会不会安装任何数据到全局.他用于取代之前pear工具 1 安装Composer curl -sS  ...

  2. 洛谷P5398 [Ynoi2018]GOSICK(二次离线莫队)

    题面 传送门 题解 维包一生推 首先请确保您会二次离线莫队 那么我们现在的问题就是怎么转移了,对于\(i\)和前缀\([1,r]\)的贡献,我们拆成\(b_i\)和\(c_i\)两部分,其中\(b_i ...

  3. 洛谷 P1064 金明的预算方案(有依赖的背包问题)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...

  4. 题解报告:hdu 1035 Robot Motion(简单搜索一遍)

    Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...

  5. 【LeetCode】LeetCode Weekly Contest 16B

    2.一个游戏 YouTube MIT 算法课上有详细的讲解 思路是DP. 话说MIT OpenCourseWare 真心不错.应该好好看看,讲的详细生动. Tips: 1.当n是偶数的时候,首先的选择 ...

  6. 264 Ugly Number II 丑数 II

    编写程序找第 n 个丑数.丑数就是只包含质因子 2, 3, 5 的正整数.例如, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 就是前10个丑数.注意:1. 1 一般也被当做丑数2. ...

  7. RabbitMQ三:Rabbit的安装

    本章文章,摘自 园友 章为忠 的文章,查找了很多资料,他总结的最细,最全面,我就直接拿过来了 他的原文 http://www.cnblogs.com/zhangweizhong/p/5689209.h ...

  8. ASP.NET XML文件

    XML是一种标记语言,具有描述所有已知和未知数据的能力.XML扩展性比较好,可以为新的数据类型制定新的数据描述规则,作为对标记集的扩展. XML的特点: 1.XML数据可以跨平台使用并可以被人阅读理解 ...

  9. 42使用NanoPiM1Plus在Android4.4.2下的录音测试

    42使用NanoPiM1Plus在Android4.4.2下的录音测试 大文实验室/大文哥壹捌陆捌零陆捌捌陆捌贰21504965 AT qq.com完成时间:2017/12/5 17:51版本:V1. ...

  10. V形

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...