zoukankan      html  css  js  c++  java
  • SCAU 9504 面试

    9504 面试

    时间限制:2000MS  内存限制:65535K 提交次数:0 通过次数:0

    题型: 编程题   语言: 无限制

    Description

        近来acm各大神牛教主均已经拿到超级offer(腾讯、网易、迅雷、阿里巴巴,百度……),无限膜拜。     小菜Arokenda因平时不学无术,已经成为华农新一届面霸,记录正在不断刷新。经过2^n次面试,哥总结出,有80%的公司都会问你期望薪水为多少。     当然,他们公司原定计划都有N多不同金额的薪水,会根据你期望的薪水找到一份与你最匹配的薪水(即最接近你期望的薪水),     当然,能否拿到必需至少具备有此二条件其中之一:     1、你是华农acmer且成为教主级人物。     2、你的忽悠能力灰常强。#^_^#
    

    Input

        第一行为T(T<20),表示有T个公司。
        接下来每个公司第一行为整数n(n<5000),表示该公司提供了n份金额不同的薪水。
        第二行为n个整数,表示这n份不同的薪水。
        第三行为整数m(m<5000),表示有m个人去面试。
        第四行为m个整数,表示这m个人的期望薪水。
    

    Output

        对每个人输出一行,表示公司提供的最接近该面试者期望薪水的薪水。
        每个公司之间用空行隔开。
    

    Sample Input

    2
    5
    1 2 3 4 5
    3
    2 4 6
    5
    1 2 3 4 5
    3
    2 4 6
    

    Sample Output

    2
    4
    5
    
    2
    4
    5
    

    Hint

        面对同样接近的两份薪水,该公司会提供低薪水的职位给你,以节省经费。
        公司提供的薪水和面试者的期望薪水都是无序的。
    

    Source

    Arokenda

    Provider

    a470086609

     

    #include<stdio.h>
    #include<string.h>
    int salay[5000];
    int main()
    {
        int i, j, mid, low, high, flag, T, t, saln, exn, temp;
        scanf("%d", &T);
        for(t=1; t<=T; ++t)
        {
            memset(salay, 0, sizeof(salay));
            scanf("%d", &saln);
            for(i=0; i<saln; ++i)
            scanf("%d", &salay[i]);
            for(i=0; i<saln-1; ++i)
            {
                flag = 1;
                for(j=0; j<saln-1-i; ++j)
                if(salay[j] > salay[j+1])
                {
                    temp = salay[j];
                    salay[j] = salay[j+1];
                    salay[j+1] = temp;
                    flag = 0;
                }
                if(flag) break;
            }
            
            scanf("%d", &exn);
            for(i=0; i<exn; ++i)
            {
                scanf("%d", &temp);
                low = 0, high = saln-1, mid = (low+high)/2;
                if(temp <= salay[low]) {printf("%d\n", salay[low]); continue;}
                else if(temp >= salay[high]) {printf("%d\n", salay[high]); continue;}
                for(; low<high; )
                {
                    if(salay[mid] > temp)  {high = mid-1; mid = (high+low)/2;}
                    else if(salay[mid] < temp){low = mid + 1; mid = (high+low)/2;}
                    else break;
                }
                
                if(salay[mid] == temp) printf("%d\n", temp);
                else if(salay[mid] < temp)
                {
                    if(temp-salay[mid] > salay[mid+1]-temp) printf("%d\n", salay[mid+1]);
                    else printf("%d\n", salay[mid]);
                } 
                else
                {
                    if(temp-salay[mid-1] > salay[mid]-temp) printf("%d\n", salay[mid]);
                    else printf("%d\n", salay[mid-1]);
                }
            }
    
            if(t != T) printf("\n");
        }
        return 0;
    } 

    解题报告:

    看题解答,注意hint,主要是熟悉了一下二分查找,OJ太慢了,加上对二分查找早忘得七七八八,所以做起来还是没太大的信心,后来发现二分查找没有错,错得的是冒泡排序多加了一个!,这题算水水的过吧!

  • 相关阅读:
    #线段树,矩阵乘法#LOJ 3264「ROIR 2020 Day 2」海报
    #线段树#洛谷 4428 [BJOI2018]二进制
    #Trie#洛谷 7717 「EZEC-10」序列
    shell脚本生成双色球号码
    k8s的tomcat多pod session会话保持配置
    国产系统优麒麟系统使用
    grdi报错--grid的asm磁盘丢失处理方法
    centos7上安装oracle的sqlplus客户端
    linux挂载
    linux占用100%cpu的java处理
  • 原文地址:https://www.cnblogs.com/liaoguifa/p/2783340.html
Copyright © 2011-2022 走看看