刷题记录——疫情问答积分(模拟)


 假设一个班级有N个学生,编号 1 ~ N。每个学生都有一个活跃度等级,第一次课前活跃度等级都为0。 每经过一次课,如果学生课上主动回答问题一次,活跃度等级加2,如果没有回答问题活跃度等级减少1,最低减到0。 活跃度等级累计大于5时会被自动列入优评名单;列入名单后如果后续活跃度等级小于等于 3时,则会暂被清除出优评名单。 假设T 次课共 M 次回答问题的机会,请你计算在第T次课还有多少个学生在优评名单中。

input:

第一行3个整数N,M,T

以下M行,每行为课次和学生编号

output:

评优学生人数

int n, m, t;
int a[100][100],b[100][100],c[100];//a数组是积分表,b是发言记录表,c是跌落记录
int main() {
    int j = 1;
    int count = 0;
    cin >> n >> m >> t;
    for (int i = 1; i <= m; i++) {
        int x, y;
        cin>> x >> y;
        b[x][y] = 1;
    }
    for (int k = 1; k <= t; k++) {       //课次
        for (int l = 1; l <= n; l++) {   //人的学号
            a[k][l] += a[k - 1][l];
            if (a[k][l] <= 3 && c[l])count--, c[l] = 0;
            if (b[k][l])a[k][l] += 2;
            else if (a[k][l] > 0)a[k][l]--;
            else if (a[k][l] == 0)continue;
            if (a[k][l] > 5)count++,c[l]=1;
        }
    }
    cout << count;

    return 0;
}

相关