2012年7月5日木曜日

AOJ Volume11 1148: Analyzing Login/Logout Records

どのPCにログインし、どのPCからログアウトしたかは考えず、
ログイン数、ログアウト数を利用する。

/********************************************
*   2012/07/02                              *
*   AOJ  Volume11 1148                      *
*   Analyzing Login/Logout Records          *
*   crane                                   *
*********************************************/
#include<iostream>
#define MAX_R 1000
using namespace std;

int main(){
    int n,m;                                            //n->PC数    m->学生数
    while(cin >> n >> m, (n||m)){
       
        int r;                                            //r->利用記録数   
        cin >> r;
        int it[MAX_R], in[MAX_R], im[MAX_R], is[MAX_R];
        for(int i=0; i<r; i++)
            cin >> it[i] >> in[i] >> im[i] >> is[i];

        int q;
        cin >> q;                                        //q->質問数
        for(int i=0; i<q; i++){
            int ts, te, tm;                               
            cin >> ts >> te >> tm;

            int sum = 0, cnt=0, s = 0, e = 0;
            for(int j=0; j<r; j++){
                if(im[j] == tm){
                    if(is[j] == 1){                        //ログイン
                        if(cnt==0){
                            if(it[j] < te){
                                if(ts < it[j])    s = it[j];   
                                else            s = ts;
                            }else                s = te;
                        }
                        cnt++;
                    }else if(is[j] == 0){                //ログアウト
                        cnt--;
                        if(cnt==0){
                            if(it[j] < te)    e = it[j];
                            else            e = te;
                            if(s <= e && ts<e)    sum += e - s;
                        }else                e = te;
                    }
                }
            }
        if(cnt > 0)    sum += te - s;
        cout << sum << endl;
        }
    }
    return 0;
}

0 件のコメント:

コメントを投稿