2013 년 알 리 바 바 여름 인턴 필기시험 문제 - 2013 년 5 월 5 일 시험

7608 단어 알 리 바 바구직
http://blog.csdn.net/doc_sgl/article/details/8888904
어제 북 대 필기시험 을 보 러 가 려 고 했 는데 결국에는 패 필 을 주지 않 겠 다 고 했 어 요. 니 마, 그래 요. 형 이 또 순 순 히 돌 아 왔 어. 지금 인터넷 에 문제 가 생 겼 어 요. 가 져 와 서 해 봐 요. 19 번 필기시험 을 잘 준비 하 세 요!
--------------------------------------------------------------------------------------------------------------
문제 풀이:
1. 문제 풀이 시간 90 분, 시간 파악 에 주의 하 세 요.
2. 시험 문 제 는 네 가지 부분 으로 나 뉜 다. 한 가지 선택 문제 (10 문제, 20 점), 부정 방향 선택 문제 (4 문제, 20 점), 빈 칸 채 우기 문답 (5 문제, 40 점), 종합 체 (1 문제, 20 점) 이다.
--------------------------------------------------------------------------------------------------------------
1. 단일 선택 문제
1. 다음 의 잘못된 표현 은:
A.SATA        500Mbps/s
B.  18XDVD        1Gbps
C.             1Gpbs
D.  DDR3        100Gbps

분석: A 와 B 에 비해 어떻게 CD 의 속도 가 하 드 디스크 보다 빠 릅 니까?B. 틀림 없어 요.기 가 이 더 넷 의 속 도 는 1000 Mbps 이 고 1Gbps 라 고 쓸 수도 있다.DDR3 - 1600 의 극한 전송 속 도 는 12.8GBp / s 이다.
2. () Linux 의 프로 세 스 통신 에 사용 할 수 없습니다.
A.    
B.    
C.   
D.   

분석: Linux 의 프로 세 스 통신 방식 은 파이프, 메시지 큐, 공유 메모리, 소켓 이 있 습 니 다.
3. 메모리 에 P1, P2, P3 세 개의 프로그램 이 설치 되 어 있 고 P1, P2, P3 의 우선 순위 에 따라 실 행 됩 니 다. 그 중에서 내부 계산 과 IO 작업 시간 은 다음 표 에서 제 시 됩 니 다 (CPU 계산 과 IO 자원 은 한 프로그램 에서 만 사용 할 수 있 습 니 다).
P1:  60ms---》IO 80ms---》  20ms
P2:  120ms---》IO 40ms---》  40ms
P3:  40ms---》IO 80ms---》  40ms

세 개의 프로그램 을 완성 하 는 것 이 한 개의 실행 보다 절약 하 는 시간 은 () 이다.
A.80ms
B.120ms
C.160ms
D.200ms

4. 두 개의 등가 스 레 드 가 동시에 다음 프로그램 을 실행 합 니 다. a 는 전체 변수 이 고 초기 에는 0 입 니 다. printf, +, - 작업 이 모두 원자 적 이 라 고 가정 하면 출력 은 () 일 수 없습니다.
[cpp]  view plain copy print ?
void foo() {  
    if(a <= 0) {  
        a++;  
    }  
    else{  
        a--;  
    }  
    printf("%d", a);  
}  
A.01
B.10
C.12
D.22

5. fun 함 수 를 다음 과 같이 지정 합 니 다. 그러면 fun (10) 의 출력 결 과 는 () 입 니 다.
[cpp]  view plain copy print ?
int fun(intx)  
{  
    return(x==1)? 1 : (x + fun(x-1));  
}  
A.0
B.10
C.55
D.3628800

6. c + 프로그램 에서 정형 변수 가 자주 사용 된다 면 그 를 () 로 정의 하 는 것 이 좋 습 니 다.
A.auto
B.extern
C.static
D.register

7. n 길이 의 문자열 중 m 길이 의 하위 문자열 과 일치 하 는 복잡 도 는 () 입 니 다.
A.O(N)
B.O(M+N)
C.O(N+logM)
D.O(M+logN)

8. n 개의 정수 a [] 에 i, j, k 만족 a [i] + a [j] = a [k] 가 존재 하 는 지 판단 하 는 시간 복잡 도 최소 값 은 ()
A.O(n^2)        B. O(n^2*logn)       C. O(n^3)    D. O(nlogn)

9. 다음 정렬 알고리즘 중 최 악의 경우 시간 복잡 도 는 n (n - 1) / 2 가 아 닙 니 다.
A.         B.       C.         D.   

10. 포탄 을 세 번 발사 하고 목 표를 명중 시 킬 확률 은 0.95 입 니 다. 한 번 발사 하면 목 표를 명중 시 킬 확률 은 얼마 입 니까?
A0.63
B0.50
C.0.32
D.0.86

2. 부정 방향 선택 문제
1. 기억 이 안 난다
2. 한 스 택 의 스 택 수 는 1, 2, 3, 4, 5, 6 입 니 다. 다음 중 어느 것 이 가능 한 스 택 순서 입 니까? (옵션 은 기억 나 지 않 습 니 다)
3. 다음 중 어떤 코드 가 a 와 b 의 수 치 를 교환 할 수 있 습 니까? (옵션 은 기억 나 지 않 습 니 다)
4. A 와 B 는 밤 에 심심 하면 별 을 세 기 시작한다. 매번 K 개 (20 & lt; = k & gt; = 30) 만 셀 수 있다. A 와 B 는 돌아 가면 서 세 어 본다. 마지막 에 누가 별 을 다 세 면 이 기 는 것 이다. 그러면 별 수가 얼마 일 때 A 가 반드시 이 기 는 것 일 까? (옵션 은 기억 나 지 않 는 다)
3. 빈 칸 채 우기 문답 문제
1. 전체 배열 A [N] 을 드 리 고 작은 프로그램 코드 (20 줄 이내) 를 완성 하여 A [N] 을 역방향 으로 합 니 다. 즉, 원래 배열 은 1, 2, 3, 4 이 고 역방향 은 4, 3, 2, 1 입 니 다.
[cpp]  view plain copy print ?
void revense(int * a,int n) {  
    int begin = 0, end = n-1;  
    int tmp;  
    while(begin < end)  
    {  
        tmp = a[begin];  
        a[begin] = a[end];  
        a[end] = tmp;  
        ++begin;  
        --end;  
    }  
}  
2. 스 케 쥴 링 에 관 한 문 제 는 제목 이 매우 길 습 니 다. 바로 세 개의 스 레 드 를 드 리 는 것 입 니 다. 먼저 분 배 된 전략 과 가장 짧 은 실행 간 의 스 케 쥴 링 전략 을 사용 한 다음 에 모든 스 레 드 가 제출 에서 실행 까지 의 시간 을 계산 하 는 것 입 니 다. 문제 가 너무 길 고 표 가 몇 개 있 습 니 다. 운영 체제 에서 작업 스 케 쥴 링 알고리즘 이 먼저 나 오고 가장 짧 은 작업 이 우선 입 니 다.
3. 한 고 된 직장 인 이 매일 알 람 을 맞 추 는 것 을 잊 어 버 릴 확률 은 0.2, 출근 시간 에 차 가 막 힐 확률 은 0.5 이다. 만약 에 알 람 을 맞 추 지 않 고 출근 하고 차 가 막 히 면 지각 할 확률 은 1.0 이다. 만약 에 알 람 을 맞 추 었 는데 출근 시간 에 차 가 막 히 면 지각 할 확률 은 0.8 이다. 만약 에 그 가 알 람 을 맞 추 지 않 았 는데 출근 시간 에 차 가 막 히 지 않 으 면 지각 할 확률 은 0.9 이다. 만약 에 그 가 알 람 을 맞 추고 출근 해도 막 히 지 않 으 면차 는 그 가 늦 을 확률 이 0. 0 이 라면 60 일 동안 출근 에 늦 을 것 이라는 기 대 를 구 했다.
정 답: 30.6 일
4. 전보 교류: 전장 에 위치 가 다른 N 개 전사 (n > 4)모든 전사 들 은 현재 의 전황 을 알 고 있 습 니 다. 지금 은 이 n 명의 전사 가 통 화 를 통 해 교 류 를 하고 자신 이 알 고 있 는 전황 정 보 를 전달 해 야 합 니 다. 매번 통 화 를 할 때마다 통화 하 는 쌍방 이 상대방 의 모든 정 보 를 알 게 할 수 있 습 니 다. 알고리즘 을 설계 하고 최소 의 통화 횟수 를 사용 해 야 합 니 다. 예, 전쟁터 의 n 명의 병사 들 은 모든 전황 정 보 를 알 고 프로그램 코드 를 쓰 지 않 아 도 됩 니 다. 가장 적은 것 을 얻 을 수통화 횟수.
5. N 명 이 있 습 니 다. 그 중의 한 스타 와 n - 1 명의 대중 은 모두 스타 를 알 고 있 습 니 다. 스타 는 그 어떠한 대중 도 모 릅 니 다. 대중 과 대중 간 의 인식 관 계 는 모 릅 니 다. 지금 만약 에 로봇 R2T 2 라면 한 사람 에 게 다른 사람 을 아 는 대가 가 O (1) 인지 물 어 볼 때마다 알고리즘 을 설계 하여 스타 를 찾아내 고 시간 복잡 도 (복잡 도 없 이 득점 하지 않 음) 를 제시 합 니 다.
정 답: 1 ~ n 이 n 명 을 옮 겨 다 니 며 1 번 과 2 번 을 먼저 꺼 내 고 1 번 이 2 를 안다 면 1 을 빼 고 1 번 이 2 를 모른다 면 2 를 빼 도 된다. 비교 할 때마다 하 나 를 빼 고 이렇게 순환 한다. n - 1 번 이후 에 한 사람 만 시간 복잡 도: O (n - 1)
종합 문제
타 오 바 오 상점 이 있 습 니 다. 한 도시 에 n 개의 창고 가 있 습 니 다. 창고 마다 저장량 이 다 릅 니 다. 지금 은 화물 운송 을 통 해 매번 창고 의 저장량 을 일치 시 켜 야 합 니 다. n 개 창고 간 의 운송 노선 은 도시 한 바퀴, 즉 1 - > 2 - > 3 - > 4 - >... - > n - > 1 - >... 화물 은 연 결 된 창고 로 만 운송 할 수 있 고 가장 작은 운송 원가 (수송량 * 거리) 를 설계 할 수 있 습 니 다.타 오 바 오 상점 의 요구 에 도달 하고 코드 를 작성 합 니 다.
해답: 이 문제 와 유사 한 문 제 는 다음 과 같다.
제목:http://www.lydsy.com/JudgeOnline/problem.php?id=1045 n 명의 어린이 가 한 바퀴 를 돌 고 있 습 니 다. 한 사람 에 게 ai 개의 사탕 이 있 습 니 다. 한 사람 은 좌우 두 사람 에 게 만 사탕 을 전달 할 수 있 습 니 다. 한 사람 에 게 한 개의 사탕 대 가 를 1 로 전달 하고 모든 사람 에 게 균등 한 사탕 의 최소 대 가 를 받 도록 합 니 다. 분석: a1 이 an 에 게 나 누 어 준 사탕 수 를 k 로 가정 하면 다음 과 같은 정 보 를 얻 을 수 있 습 니 다.  a1              a2                        a3           an - 1 an 현재 수량: a1 - k          a2         a3           an - 1 an + k 에 필요 한 대가: | a1 - k - ave | a1 + a2 - k - 2 * ave | | a1 + a2 + a3 - k - 3 * ave | a1 +.. + a (n - 1) - k - (n - 1) * ave |  |k | sum [i] 로 a1 에서 ai 로 i * ave 의 합 치 를 줄 이 는 것 을 표시 합 니 다. 이 이상 은 총 대가 = | s1 - k | + | s2 - k | +... + | s (n - 1) - k | + | k | 로 간략화 할 수 있 습 니 다. k 가 s1.. s (n - 1) 의 중위 일 때 필요 한 대 가 는 최소 입 니 다.
코드 를 네트워크 에 전송:
[cpp]  view plain copy print ?
#include   
#include   
#include   
using namespace std;  
  
const int X = 1000005;  
typedef longlong ll;  
ll sum[X],a[X];  
ll n;  
ll Abs(ll x){  
    return max(x,-x);  
}  
int main(){  
    //freopen("sum.in","r",stdin);  
    while(cin>>n){  
        ll x;  
        ll tot = 0;  
        for(inti=1;i<=n;i++){  
            scanf("%lld",&a[i]);  
            tot += a[i];  
        }  
        ll ave = tot/n;  
        for(inti=1;i
            sum[i] = a[i]+sum[i-1]-ave;  
        sort(sum+1,sum+n);  
        ll mid = sum[n/2];  
        ll ans = Abs(mid);  
        for(inti=1;i
            ans += Abs(sum[i]-mid);  
        cout<
    }  
    return0;  
}  

  • 좋은 웹페이지 즐겨찾기