24h購物| | PChome| 登入
2011-08-24 11:27:58| 人氣954| 回應0 | 上一篇 | 下一篇

b109. 2. IC 板檢測

推薦 0 收藏 0 轉貼0 訂閱站台

b109. 2. IC 板檢測

內容 :

輸入說明 :

輸出說明 :

請輸出最後一批完成檢測工作的起始時間點及該機台號個整應以一個 空格分開。輸入保證會有批或批以上的工作在最後同時完成。

範例輸入 :

2
10 20
5 100
10 200
15 300
19 500
0 0

範例輸出 :

60 2

提示 :

出處 :

93全國資訊學科能力決賽



作法 : 模擬
不過要記住要用 秒 為單位, 去找最小
以 分 為單位, 紀錄運作時間

/**********************************************************************************/
/*  Problem: b109 "2. IC 板檢測" from 93全國資訊學科能力決賽         */
/*  Language: C                                                                   */
/*  Result: AC (4ms, 346KB) on ZeroJudge                                          */
/*  Author: morris1028 at 2011-08-24 11:25:20                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#define MaxV 2147483647
typedef struct {
    int arrive, v, in;
}Work;
Work Data[1001];
int cmp(const void *a, const void *b) {
    Work *aa, *bb;
    aa = (Work *)a, bb = (Work *)b;
    if(aa->arrive > bb->arrive)            return 1;
    else if(aa->arrive < bb->arrive)    return 0;
    else {
        return aa->in > bb->in;
    }
}
main() {
    int n, a, b, C = 0;
    while(scanf("%d", &n) == 1) {
        C++;
        int machine[21], ar, v, in = 0;
        for(a = 1; a <= n; a++)
            scanf("%d", &machine[a]);
        while(scanf("%d %d", &ar, &v) == 2) {
            if(ar == 0 && v == 0) break;
            Data[in].arrive = ar, Data[in].v = v;
            Data[in].in = in, in++;
        }
        qsort(Data, in, sizeof(Work), cmp);
        int worktime[21] = {};
        for(a = 0; a < in; a++) {
            int min_mach = 0, t, min;
            double tx, min2 = MaxV;
            for(b = 1; b <= n; b++) {
                if(worktime[b] == 0 || worktime[b] < Data[a].arrive)
                    t = Data[a].arrive;
                else    t = worktime[b];
                tx = t*60 + 5*60 + ((double)Data[a].v*60)/machine[b];
                tx = (int)(tx + (tx > (int)tx));
                t += 5 + Data[a].v/machine[b] + (Data[a].v%machine[b] != 0) + 10;
                if(tx < min2)    min = t, min_mach = b, min2 = tx;
            }
            worktime[min_mach] = min;
            Data[a].arrive = min - 10 - (Data[a].v/machine[min_mach] + (Data[a].v%machine[min_mach] != 0));
            Data[a].v = min_mach;
        }
        printf("%d %d\n", Data[in-1].arrive, Data[in-1].v);
    }
    return 0;
}

台長: Morris
人氣(954) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 資訊競賽 |
此分類下一篇:b113. 6. 線性系統求解
此分類上一篇:d249. 94北縣賽-1-心意相通的指數(Match)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文