刷题记录——疫情问答积分(模拟)
假设一个班级有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; }