1. 程式人生 > >洛谷 P1193 洛谷團隊訓練VS傳統團隊訓練

洛谷 P1193 洛谷團隊訓練VS傳統團隊訓練

耗時 -o stream 如何 學校 orange 2015年 一點 程序

P1193 洛谷團隊訓練VS傳統團隊訓練

題目背景

“在中學的信息學教育領域,洛谷無疑是一個相當受歡迎的輔助網站。同時有百余所學校正在通過洛谷進行信息學競賽(以後簡稱OI)的教育。洛谷之所以如此受歡迎,是因為洛谷創新的將OI教育的幾乎每一個環節都搬到了線上,無論是學校的競賽教練還是學生,均可以僅僅使用這一個網站來進行練習,提升自己的能力。”

——摘自《廈門中小學教育科學研究》,2015年2月號。

題目描述

XX中學的兩位信息組的教練正在為學校信息組是否應當將洛谷作為主要的訓練工具而爭論不休,最後決定采取一個量化的辦法來決定是否遷移。

該中學的原來訓練方法是,在機房的教師機裏面用cena裝載好測試數據,裝載數據所需要Ta時間,每一道題目都要裝載。學生寫好代碼後,可以跑到教師機上收取程序並進行評測。但由於需要往返的路程,因此每跑一次就要浪費Tb時間。所以也允許學生在自己的機子上裝載好測試數據,可以根據自己的需要選擇裝載的題目,這需要花費和在教師機裝載數據一樣的時間Ta,但是每次評測花費的時間就減少為Tc。此外,該中學可能會用excel記錄各位同學的訓練情況,如果某位同學的某道題的得分高於表格裏的記錄,那就會花費Td時間將這個成績更新,否則就不必費那個事了,如果之前沒有提交過這道題視為表格記錄的程序為0分。

而在洛谷中,只需要將題目和測試數據上傳到洛谷,花費Ta時間。每次評測學生只需花費Tc時間即可。記錄成績?那是洛谷的事兒,一提交完就幫你整理好了表格根本不費時間。

看起來可以省下不少時間吧。。然而,支持傳統訓練方法的教練認為,洛谷並非100%的穩定,在有的情況會無法提供服務,因此首先要將洛谷的耗時除以它的可用度(一個小於100%的數字A%)並去掉小數點。又因為傳統觀念不易糾正,總是有不信任將題目數據交給洛谷這樣的想法(kkksc03:怪我咯?),因此使用洛谷的耗時還要再加上一個罰時H以做公平比較。

現在給出該中學的訓練情況,希望你幫兩位教練分析一下到底該如何選擇。

輸入輸出格式

輸入格式:

第一行兩個整數,N與M,代表題目數量與學生數量。

第二行N個整數,P_i,為涉及的題目編號。

第三行M個整數,S_i,為學生的學號。

第四行7個整數,Ta,Tb,Tc,Td,A,H,E,前6個數字的意義見題目描述,E如果是1那麽在excel中記錄成績,如果是0則不記錄。

第五行一個整數R,代表評測數量

接下來R行,評測記錄,每行是Pr_i,Sr_i,Sc_i分別為該次評測的題目號、學號以及成績。

輸出格式:

三行。

第一行為傳統方法的的耗時。

第二行為使用洛谷包括罰時在內的耗時。

第三行是結論,如果使用洛谷的時間小於傳統方法的時間,那麽輸出“Use Luogu!”,不含引號。否則輸出“Forget it...”。

輸入輸出樣例

輸入樣例#1: 復制
4 4
501 502 503 504
2 3 5 7
50 30 10 5 93 50 1
10
501 2 10
501 2 80
501 2 70
502 3 0
502 3 0
504 5 100
503 7 0
503 7 0
503 7 0
503 7 10
輸出樣例#1: 復制
480
372
Use Luogu!
輸入樣例#2: 復制
2 3
101 102
1 2 3
70 60 50 1 80 100 0
6
101 1 100
101 2 100
101 3 100
102 1 100
102 2 100
102 3 100
輸出樣例#2: 復制
500
650
Forget it...

說明

樣例1解釋

使用傳統方法的話,裝載4道題目需要4*50=200,2號同學和7號同學用教師機需要時分別30*3=90,30*4=120,但是明顯自己裝載cena只需要50+10*3=80,50+10*4=90更優。而3,5同學則使用教師機就好,耗時60,30。2號同學的前兩次評測單調遞增,所以額外花費2*5=10時間記錄,3號同學太弱了都是0分所以沒必要記錄了,5與7各耗費5時間。所以這種情況總時間耗費為200+80+90+60+30+10+5+5=480

使用洛谷的話,裝載題目耗費200,10次評測共耗費10*10=100,考慮穩定性時間為(200+100)/93%=322,所以最後總耗時為322+50=372,所以決定使用洛谷。

【數據範圍】

其中50%數據中,不需要進行成績的excel記錄。

其中50%數據中,題目編號和學號均大於等於0,小於等於1000。

(這兩種情況,可能會重疊)

對於100%的數據,保證0<n,m<=1000,0<Ta,Tb,Tc,Td,H<=10000,R<100000,0<=Sc_i<=100,0<A<=100,學號和題目號在100000000(8個0)之內。

實際上,根據超級監控頒發的證書,洛谷2015年第一季度可靠性(SLA)為99.36%。同時觀念也是可以改變的。

洛谷的優點很多都是不能量化的,其精華在於社區。和全國的OIer一起學習交流,不很好嗎?

最後插一句,去年的【榨取kkksc03】的布告依然有效,詳情 。

思路:主要是模擬,再加上一點離散化就可以了。

要註意的一點是:應該對於每個學生的每個問題討論是本機測試還是教師機測試,否則就會像我一樣。。。。GG

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
map<int,int>stu,pro;
int bns;
int n,m;
int dis[1010][1010];
long long ans1,ans2;
int r,ta,tb,tc,td,a,h,e;
int ans[1010][1010],vis[1010];
void work1(){
    ans1=n*ta;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            ans1+=min(tc*dis[i][j]+ta,tb*dis[i][j]);
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){ int x;scanf("%d",&x);pro[x]=i; }
    for(int i=1;i<=m;i++){ int x;scanf("%d",&x);stu[x]=i; }
    scanf("%d%d%d%d%d%d%d%d",&ta,&tb,&tc,&td,&a,&h,&e,&r);
    for(int i=1;i<=r;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        if(ans[pro[x]][stu[y]]<z){ bns+=td;ans[pro[x]][stu[y]]=z; }
        dis[pro[x]][stu[y]]++;
    }
    work1();if(e==1)    ans1+=bns;
    ans2=(long long)((n*ta+r*tc)/(a/100.0))+h;
    cout<<ans1<<endl<<ans2<<endl;
    if(ans2<ans1)    cout<<"Use Luogu!"<<endl;
    else cout<<"Forget it..."<<endl;
} 

洛谷 P1193 洛谷團隊訓練VS傳統團隊訓練