2018年华东师范大学 复试机试

比赛两个小时,为OI赛制(可以暴力拿部分分),一共六道题目。以下仅为本人练习记录,算法不是最优的。

A 庙会

单点时限: 1.0 sec

内存限制: 256 MB

代码:

#include <iostream>
#include <queue>
using namespace std;

int main(){
    int m,n,k;
    cin>>m>>n>>k;
    queue<int> q1;
    queue<int> q2;
    for(int i=1;i<=m;i++) q1.push(i);
    for(int i=1;i<=n;i++) q2.push(i);

    for(int i=0;i<k;i++){
        int t1=q1.front(),t2=q2.front();
        cout<<t1<<" "<<t2<<endl;
        q1.pop();
        q2.pop();
        q1.push(t1);
        q2.push(t2);
    }
    return 0;
}

B 热河路

思路:找规律,1、2、4、7、11....这些位置上是1,其他是0,满足二元一次方程 y=0.5x^2-0.5x+1,即2y-2=x*(x-1)

细节:用cin、cout的时候最后一个样例超时了,改用scanf、printf后AC了。

代码:

#include <cmath>
#include <cstdio>

int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        int y;
        scanf("%d",&y);
        int m=2*y-2;
        int x=sqrt(m)+1;
        if(m==x*(x-1)) printf("1\n");
        else printf("0\n");
    }
    return 0;
}

C 定西

单点时限: 1.0 sec

内存限制: 256 MB

这里用BFS解决。

代码:

#include <iostream>
#include <queue>

using namespace std;

bool IsBroken(int x,int* broken,int k){//检查是否是破损的阶梯
    for(int i=0;i<k;i++)
        if(x==broken[i]) return true;
    return false;
}

int main(){
    int n,k;
    cin>>n>>k;
    int broken[k];
    for(int i=0;i<k;i++) cin>>broken[i];
    queue<int> q;//用一个队列实现BFS
    q.push(1);
    q.push(2);
    q.push(3);

    int res=0;//记录有多少种方法
    while(q.empty()==0){
        int t=q.front();
        q.pop();
        if(IsBroken(t,broken,k)==1) continue;//如果走到破损的楼梯上,则不再考虑接下来的情况
        if(t==n) res++;//如果走到第n阶楼梯,表示成功找到一种可行的方法
        if(t+1<=n) q.push(t+1);
        if(t+2<=n) q.push(t+2);
        if(t+3<=n) q.push(t+3);
    }
    cout<<res<<endl;
    return 0;

}

D 和你在一起

单点时限: 1.0 sec

内存限制: 256 MB

代码:

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    int n;
    cin>>n;
    string a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n);
    string res="";
    for(int i=n-1;i>=0;i--){
        res=res+a[i];
    }
    cout<<res<<endl;
    return 0;
}

E 梵高先生

单点时限: 1.0 sec

内存限制: 256 MB

代码:

#include <iostream>
#include <algorithm>

using namespace std;

int main(){
    int n;
    cin>>n;
    int a[n][n];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++){
            if(j==0) a[i][j]=1;
            else a[i][j]=0;
        }
    for(int i=1;i<n;i++)
        for(int j=1;j<n;j++)
            a[i][j]=a[i-1][j-1]+a[i-1][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<=i;j++){
            if(j<i) cout<<a[i][j]<<" ";
            else if(j==i) cout<<a[i][j]<<endl;
        }

    return 0;
}

F 西班牙馅饼

单点时限: 1.0 sec

内存限制: 256 MB

代码:

#include <iostream>

using namespace std;

int main(){
    int n,m;
    cin>>n>>m;
    int a[n][m];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>a[i][j];

    int sum=0;
    for(int i=0;i<n;i++){
        int max=0;
        for(int j=0;j<m;j++){
            if(a[i][j]>max) max=a[i][j];
        }
        sum+=max;
    }
    cout<<sum<<endl;
    return 0;
}

说明

以上习题来自 ECNU Online Judge:https://acm.ecnu.edu.cn/

全部评论

相关推荐

04-11 21:31
四川大学 Java
野猪不是猪🐗:(ja)va学弟这招太狠了
点赞 评论 收藏
分享
高斯林的信徒:武大简历挂?我勒个骚岗
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务