9.6noip模拟试题


题目名称


盘子序列


四轮车


点名


提交文件


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=0;
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
            c[i]=a[i];
        sort(a+1,a+1+n);
        int p1,p2=1;
        for(p1=1;p1<=n;p1++){
            if(a[p1]==c[p2]){
                p2++;continue;
            }
            if(a[p1]<c[p2])b[++top]=p1;
            else{
                for(;top>0;){
                    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=1;break;
            }
            else top--;p2++;
        }
        if(falg)printf("J\n");
        else printf("Y\n");
    }
    return 0;
}

四轮车

【题目描述】

在地图上散落着 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<0?-a:a;
}
void Add(){
    ans[1]++;
    for(int i=1;i<=ans[0];i++)
        if(ans[i]>9){
            ans[i]%=10;
            ans[i+1]++;
        }
    if(ans[ans[0]+1])ans[0]++;
}
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%2)x3=x4=y3=y4=0;
    else{
        c>>=1;
        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 0;
    int falg=0,flag=0;
    p1=lower_bound(xx+1,xx+1+n,x3)-xx;
    p2=upper_bound(xx+1,xx+1+n,x3)-xx;
    for(int i=p1;i<p2;i++){
        if(xx[i]!=x3)return 0;
        if(yy[i]==y3){
            falg=1;break;
        }
    }
    p1=lower_bound(xx+1,xx+1+n,x4)-xx;
    p2=upper_bound(xx+1,xx+1+n,x4)-xx;
    for(int i=p1;i<p2;i++){
        if(xx[i]!=x4)return 0;
        if(yy[i]==y4){
            flag=1;break;
        }
    }
    return falg&&flag;
}
int main()
{
    freopen("car.in","r",stdin);
    freopen("car.out","w",stdout);
    scanf("%d",&n);ans[0]=1;
    for(int i=1;i<=n;i++)
        scanf("%d%d",&P[i].x,&P[i].y);
    sort(P+1,P+1+n,cmp);
    for(int i=1;i<=n;i++){
        xx[i]=P[i].x;
        yy[i]=P[i].y;
    }
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++){
            if(yy[i]>=yy[j])continue;
            Cal(i,j);
            if(Judge())Add();
        }
    for(int i=ans[0];i>=1;i--)
        printf("%d",ans[i]);
    return 0;
}

点名

【题目描述】

在 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=1;i<=n;i++)
        cin>>a[i];
    for(long long i=1;i<=m;i++){
        cin>>x;c[x]++;
    }
    s.clear();
    for(long long i=1;i<=n;i++){
        s.insert(a[i]);
        while(c[i]){
            c[i]--;    p=s.begin();
            for(long long j=1;j<=cnt;j++)p++;
            cout<<*p<<endl;cnt++;
        }
    }
    return 0;
}

主席树:

/*正解好像是搞了两个堆 没仔细看*/
#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*5];
ll init(){
    ll x=0,f=1;char s=getchar();
    while(s<‘0‘||s>‘9‘){if(s==‘-‘)f=-1;s=getchar();}
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;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+1,t[pre].lc,t[pre].rc);
    if(l==r)return;
    ll mid=l+r>>1;
    if(pos<=mid)Insert(t[root].lc,t[pre].lc,pos,l,mid);
    else Insert(t[root].rc,t[pre].rc,pos,mid+1,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>>1;
    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+1,r);
}
int main()
{
    freopen("rollcall.in","r",stdin);
    freopen("rollcall.out","w",stdout);
    n=init();m=init();
    for(ll i=1;i<=n;i++){
        a[i]=init();
        order[i]=a[i];
    }
    sort(order+1,order+1+n);
    num=unique(order+1,order+1+n)-order-1;
    for(ll i=1;i<=n;i++){
        ll pos=lower_bound(order+1,order+1+num,a[i])-order;
        Insert(root[i],root[i-1],pos,1,num);
    }
    ll l,r,k;
    for(ll i=1;i<=m;i++){
        l=1;r=init();k=i;
        ll p=Query(root[l-1],root[r],k,1,num);
        cout<<order[p]<<endl;
    }
    return 0;
}

时间: 2024-10-25 21:42:28

9.6noip模拟试题的相关文章

模拟试题B

模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多形边面片的数量非常大的情况下,哪一个消隐算法速度最快? ( ) A)深度缓存算法(Z-Buffer) B)光线跟踪算法 C)画家算法 D)不确定 3.双线性光强插值法(Gouraud Shading)存在哪些问题?( ) A)光照强度在数值上不连续 B)生成多面体真实感图形效果差 C)生成曲面体真实

模拟试题C

模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编码裁剪法裁剪二维线段时,判断下列直线段采用哪种处理方法.假设直线段两个端点M.N的编码为1000和1001(按TBRL顺序)( ) A)直接舍弃 B)直接保留 C)对MN再分割求交 D)不能判断 3.下面哪个不是齐次坐标的特点( ) A)用n+1维向量表示一个n维向量 B)将图形的变换统一为图形的坐

计算机职称考试题库Internet模块操作练习模拟试题(一)

1.请为当前计算机添加连接到com1口的标准56000 bps调制解调器设备,要求不检测当前连接设备. 当前界面:开始à控制面板 方法一: 打开[电话和调整解调器选项]à[调整解调器]选项卡à[添加]按钮à选中[不要检测我的调制解调器设备……]à下一步à型号:标准 56000 bps 调制解调器à下一步à选定的端口:com1à下一步à完成 方法二: 添加新硬件à下一步à选择[是,我已经连接了此硬件]à下一步à列表拉到最后选择[添加新的硬件设备]à下一步à选择[安装我手动从列表选择的硬件(高级)]

2014年软考-信息技术处理员-模拟试题及答案【第一章】

51CTO学院,在软考备考季特别整理了"2014年软考信息技术处理员模拟试题及答案[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考-信息技术处理员-模拟试题及答案[汇总篇]  ●在计算机内部用来传送.存储.加工处理的数据或指令都是以____(1)_B___形式进行的. A. 十进制码 B.二进制码 C.八进制码 D.十六进制码 ●如果一个存储单元能存放一个字节,那么一个32KB的存储器共有____(2)_B__

2014年软考-信息技术处理员-模拟试题及答案【第二章】

51CTO学院,在软考备考季特别整理了"2014年软考信息技术处理员模拟试题及答案[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考-信息技术处理员-模拟试题及答案[汇总篇]  ●计算机网络的主要目标是实现____(16 )__C__. A.数据处理 B.文献检索 C.资源共享和信息传输 D.信息传输 ●Internet上,访问Web网站时用的工具是浏览器.下列____(17 )_A___就是目前常用的Web浏览

2014年软考-信息技术处理员-模拟试题及答案【第三章】

51CTO学院,在软考备考季特别整理了"2014年软考信息技术处理员模拟试题及答案[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考-信息技术处理员-模拟试题及答案[汇总篇]  ●备注视图中的注释信息在文稿演示时____(31)__B__. A.会显示 B.不会显示 C.显示一部分 D.显示标题 ●Access 2000关系数据库是____(32)_D___的集合. A.数据 B.数据库对象 C.表 D.关系 ●

2014年软考-信息技术处理员-模拟试题及答案【第四章】

51CTO学院,在软考备考季特别整理了"2014年软考信息技术处理员模拟试题及答案[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考-信息技术处理员-模拟试题及答案[汇总篇]  ●Office家族为用户提供了各种不同类型的模板.扩展名为.mdz的模板是____(41)D____中的模板. A.Word B.Excel C.PowerPoint D.Access ●在Excel中,选取一行单元格的方法是____(4

2014年软考-信息技术处理员-模拟试题及答案【第五章】

51CTO学院,在软考备考季特别整理了"2014年软考信息技术处理员模拟试题及答案[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考-信息技术处理员-模拟试题及答案[汇总篇]  ●管理信息系统科学的3要素是系统的观点.数学的方法和____(51)A____. A.计算机的应用 B.计算机科学 C.计算机理论 D.计算机方法 ●知识产权可分为:____(52)___C_两类. A.农业产权和著作权 C.工业产权和著

2014年软考-信息技术处理员-模拟试题及答案【第六章】

51CTO学院,在软考备考季特别整理了"2014年软考信息技术处理员模拟试题及答案[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考-信息技术处理员-模拟试题及答案[汇总篇]  ●Access数据库的类型是____(61)_C___. A.层次数据库 B.网状数据库 C.关系数据库 D.面向对象数据库 ●在Word文档操作中,经常利用____(62)_C___操作过程相互配合,用以将一段文本内容移到另一处. A.