0

//問題は私のコンピューターではなく、問題は「SIGABRT実行時エラー」です。//codechefページに投稿すると。助けてください。
//必要な出力はラップトップで行われるため、実際には詳細は必要ありません。問題が存在するのは //codechef だけです。

#include <cstdlib> 
#include <cstdio>
#include <ctime>
#include <iostream>

// codechef に関する Alien Chefs の質問

using namespace std;

int check(int, int[], int[]);

int *grpDone = 0;
int n, q, k, s[100001], e[100001], alienTime[21];

// codechef に投稿するのはこれが初めてなので、どこを変更する必要があるかを確認してください。struct timeDetail { int カウント; int curr; int *vids;

    timeDetail() {
        count = 0;
        curr = 0;
        vids = (int*)calloc(n, sizeof(int));
    }

    ~timeDetail() {
        free(vids);
    }

    void addVid(int n) {
        vids[curr++] = n;
    }

    int getNumVids() {
        return curr;
    }
}*atTime ;
int main() {
    int maxTime = 0;
    scanf(" %d", &n);
    for(int i=1; i<=n; i++) {
        scanf(" %d %d", &s[i], &e[i]);
        if(e[i] > maxTime)
            maxTime = e[i];
    }

    atTime = new timeDetail[maxTime+1];
    scanf(" %d", &q);
    for(int i=1; i<=q; i++) {
        scanf(" %d", &k);

        ::grpDone = (int*)calloc(n+1, sizeof(int));
        int totVids = 0;
        for(int j=1;j<=k;j++) {
            scanf(" %d", &alienTime[j]);
            int numVids = 0;
            numVids = check(alienTime[j], s, e);
            totVids += numVids;
        }
        printf("%d\n", totVids);
        free(::grpDone);
    }
    return 0;
}

int check(int t, int s[], int e[]) {
    int prevFound = atTime[t].getNumVids();
    int numVids = 0;
    if(prevFound > 0) {
        for(int i = 1; i<=prevFound; i++) {
            if(::grpDone[atTime[t].vids[i]] == 1)
                continue;
            else {
                ::grpDone[atTime[t].vids[i]] = 1;
                numVids++;
            }
        }
        return numVids;
    }
    for(int i=1; i<=n; i++) {
        if(t>=s[i] && t<=e[i]) {
            atTime[t].addVid(i);
            if(::grpDone[i] == 1) {
                continue;
            } else {
                ::grpDone[i] = 1;
                numVids++;
            }
        }
    }
    return numVids;
}
4

0 に答える 0