题目名称

盘子序列

四轮车

点名

提交文件

disk.pas/c/cpp

car.pas/c/cpp

rollcall.pas/c/cpp

输入文件

disk.in

car.in

rollcall.in

输出文件

disk.out

car.out

rollcall.out

时间限制

1s

1s

1s

空间限制

128M

128M

128M

评测方式

传统

传统

传统

盘子序列

【题目描述】

有 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<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1000010
using namespace std;
int n,a[maxn],b[maxn],c[maxn],falg,top;
int main()
{
freopen("disk.in","r",stdin);
freopen("disk.out","w",stdout);
while(scanf("%d",&n)!=EOF){
falg=top=;
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<=n;i++)
c[i]=a[i];
sort(a+,a++n);
int p1,p2=;
for(p1=;p1<=n;p1++){
if(a[p1]==c[p2]){
p2++;continue;
}
if(a[p1]<c[p2])b[++top]=p1;
else{
for(;top>;){
if(b[top]==c[p2]){
top--;p2++;
}
else break;
}
if(a[p1]!=c[p2])b[++top]=a[p1];
else p2++;
}
}
while(top){
if(b[top]!=c[p2]){
falg=;break;
}
else top--;p2++;
}
if(falg)printf("J\n");
else printf("Y\n");
}
return ;
}

四轮车

【题目描述】

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

  1. 一辆车需要四个车轮,且四个车轮构成一个正方形
  1. 车轮不能移动你需要计算有多少种造车的方案(两个方案不同当且仅当所用车轮不全相同,坐

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

【输入格式】

第一行一个整数 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

/*
枚举对角线上的点
算出剩下的两个 然后看有没有
没有用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

暴力set 70分

:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#define maxn 30010
using namespace std;
long long n,m,x,c[maxn],a[maxn],cnt;
multiset<long long>s;
multiset<long long>::iterator p;
int main()
{
freopen("rollcall.in","r",stdin);
freopen("rollcall.out","w",stdout);
cin>>n>>m;
for(long long i=;i<=n;i++)
cin>>a[i];
for(long long i=;i<=m;i++){
cin>>x;c[x]++;
}
s.clear();
for(long long i=;i<=n;i++){
s.insert(a[i]);
while(c[i]){
c[i]--; p=s.begin();
for(long long j=;j<=cnt;j++)p++;
cout<<*p<<endl;cnt++;
}
}
return ;
}

主席树:

/*正解好像是搞了两个堆 没仔细看*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define maxn 30010
#define maxm 1000010
using namespace std;
ll n,m,cnt,num,a[maxn],root[maxn],order[maxn];
struct node{
ll lc,rc,sum;
}t[maxm*];
ll init(){
ll x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
ll Build(ll S,ll L,ll R){
ll k=++cnt;t[k].sum=S;
t[k].lc=L;t[k].rc=R;
return k;
}
void Insert(ll &root,ll pre,ll pos,ll l,ll r){
root=Build(t[pre].sum+,t[pre].lc,t[pre].rc);
if(l==r)return;
ll mid=l+r>>;
if(pos<=mid)Insert(t[root].lc,t[pre].lc,pos,l,mid);
else Insert(t[root].rc,t[pre].rc,pos,mid+,r);
}
ll Query(ll L,ll R,ll pos,ll l,ll r){
if(l==r)return l;
ll sum=t[t[R].lc].sum-t[t[L].lc].sum;
ll mid=l+r>>;
if(sum>=pos)return Query(t[L].lc,t[R].lc,pos,l,mid);
else return Query(t[L].rc,t[R].rc,pos-sum,mid+,r);
}
int main()
{
freopen("rollcall.in","r",stdin);
freopen("rollcall.out","w",stdout);
n=init();m=init();
for(ll i=;i<=n;i++){
a[i]=init();
order[i]=a[i];
}
sort(order+,order++n);
num=unique(order+,order++n)-order-;
for(ll i=;i<=n;i++){
ll pos=lower_bound(order+,order++num,a[i])-order;
Insert(root[i],root[i-],pos,,num);
}
ll l,r,k;
for(ll i=;i<=m;i++){
l=;r=init();k=i;
ll p=Query(root[l-],root[r],k,,num);
cout<<order[p]<<endl;
}
return ;
}

9.6noip模拟试题的更多相关文章

  1. 模拟试题C

    模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编 ...

  2. 模拟试题B

    模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多 ...

  3. 模拟试题A

    模拟试题A 一.单项选择题(2′*12=24′) 1.下面各种坐标变换中,会产生变换前后维度的改变的是( ) A)建模变换 B)观察变换 C)投影变换 D)视口变换 2.下列描述深度缓冲消隐算法的特点 ...

  4. CCF 模拟试题——出现次数最多的数 官方答案解析及自己写的正确答案

    前几天知道的CCF计算机职业资格认证考试,觉得好像比软考含金量高一些,就去了解了一下,做了模拟试题中的 “出现次数最多的数” 这道题,我的算法和官方答案算法不同,个人觉得觉得官方的好一点,没那么繁琐, ...

  5. 11.9 noip模拟试题

    NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...

  6. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

  7. 9.29noip模拟试题

    环上的游戏(cycle) 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这 ...

  8. 9.20 noip模拟试题

      Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...

  9. 9.16noip模拟试题

    题目描述 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重).早苗的 ...

随机推荐

  1. CHROME下载地址

    Chrome官方独立中文安装包下载地址 一般我们安装Google Chrome浏览器都是访问 http://www.google.com/chrome/?hl=zh-CN 然后下载运行ChromeSe ...

  2. Java中传参的值传递和引用传递问题(转)

    今天遇到了一个java程序,需要用参数来返回值(虽然最后用另一种方法实现了),在网上看到这样一篇文章,很受启发. 本文章来自于http://hi.baidu.com/xzhilie/blog/item ...

  3. Area

    http://poj.org/problem?id=1265 #include<cstdio> #include<istream> #include<algorithm& ...

  4. 第二章 Stream API

    引例: 1 List<String> strList = Arrays.asList("zhaojigang","nana","tiany ...

  5. QT、QTE、qtopia区别

    QT.QTE.qtopia区别 Qt的授权是分为两条线,商业版和开源版.如果使用商业版的Qt,那么开发出的程序可以是私有的和商业的:如果使用的是开源版的Qt,由于其使用的是GPL协议,那么可发出的程序 ...

  6. 「Poetize5」水叮当的舞步

    Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上 ...

  7. 【KMP】【最小表示法】NCPC 2014 H clock pictures

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1794 题目大意: 两个无刻度的钟面,每个上面有N根针(N<=200000),每个 ...

  8. 一招解决IE7无法访问https网页

    很多人都遇到过这种情况: 自己的IE访问不了https的网页了,如果你百度的话,有人会告诉你注册一堆的dll文件,或者更改IE设置啦什么的.上午,我也遇到这个问题,这些方法都不管用.请教了高手,将方法 ...

  9. App自动更新之通知栏下载

    见证过博客园的多次升级,你也希望你的软件通过更新发布新特性通知用户吧,是的.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.设计思路,使用Versio ...

  10. osg

    智能指针使用: osg::Geode* geode=new osg::Geode;//新建Geode指针 osg::ref_ptr<osg::Geode>geodePtr=geode;// ...