top1编程
← 返回题目
题解

【入门】成绩

3 条题解

  • 0
    @ 2026-7-29 0:06:30
    #include <bits/stdc++.h>
    using namespace std;
    
    /*
    【解题思路】
    咱们这次用的是“名单对号入座”的办法:
    1. 建立空表:a[i] 存第 i 门课的代码,s[i] 存这门课的成绩。
    刚开始,咱们把所有成绩 s[i] 都填上 -1,代表“还没录入”。
    2. 查找更新:每来一条成绩信息 (p, s1),咱们就去 a 数组里找这个代码。
    找到了在第几个位置,就在 s 数组对应的位置把 -1 改成实际分数 s1。
    (如果有多次更新,新分数会自动把旧分数覆盖掉,非常省心!)
    3. 统计结果:
    - 旷考:s[i] 还是 -1 的,说明名单上这门课没成绩。
    - 不及格:s[i] 是 -1 或者小于 60 分的,通通算在内。
    */
    
    int n, m, sum1, sum2; // sum1存旷考,sum2存不及格
    long long a[5005], s[5005];
    
    int main() {
    	// 读入课程总数 n 和信息条数 m
    	if(!(cin >> n >> m)) return 0;
    	
    	for (int i = 1; i <= n; i++) {
    		cin >> a[i]; // 记下每门课的“身份证号”
    		s[i] = -1;   // 初始化成绩为 -1(表示旷考)
    	}
    	
    	// 循环 m 次处理成绩信息
    	while (m--) {
    		long long p, s1; // p是代码,s1是分数
    		cin >> p >> s1;
    		// 核心:在名单里挨个找,看看这分数是谁的
    		for (int i = 1; i <= n; i++) {
    			if (p == a[i]) {
    				s[i] = s1; // 找到了,对号入座改成绩
    				break;
    			}
    		}
    	}
    	
    	// 最后扫一遍名单,数数不及格和旷考的人数
    	for (int i = 1; i <= n; i++) {
    		if (s[i] == -1) {
    			sum1++; // 还是 -1,说明旷考了
    		}
    		if (s[i] == -1 || s[i] < 60) {
    			sum2++; // 没考或者考砸了,都不及格
    		}
    	}
    	
    	cout << sum1 << endl << sum2 << endl;
    	
    	return 0;
    }
    
    • 0
      @ 2026-7-29 0:06:26
      #include<bits/stdc++.h>
      using namespace std;
      
      int a[100005];
      int d[100005];
      
      int main(){
      
      	int n,p;
      	cin>>n>>p;
      
      	// 输入每个同学的初始成绩
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      	}
      
      	// 构造差分数组
      	// d[i]表示第i个成绩和前一个成绩的差值
      	for(int i=1;i<=n;i++){
      		d[i]=a[i]-a[i-1];
      	}
      
      
      	// p次调整
      	while(p--){
      
      		int x,y,z;
      		cin>>x>>y>>z;
      
      		// x到y全部增加z
      		// 只修改两个位置
      		d[x]+=z;
      		d[y+1]-=z;
      	}
      
      
      	// 通过前缀和还原最终成绩
      	for(int i=1;i<=n;i++){
      		d[i]=d[i-1]+d[i];
      	}
      
      
      	// 找最低分
      	int minn=d[1];
      
      	for(int i=2;i<=n;i++){
      		minn=min(minn,d[i]);
      	}
      
      	cout<<minn;
      
      	return 0;
      }
      
      • 0
        @ 2026-7-28 22:09:44
        #include<bits/stdc++.h>
        using namespace std;
        int main(){
        	int n;
        	cin>>n;
        	if(n>=60){
                cout<<"pass!"<<endl;
            }
        	else{
                cout<<"sorry!"<<endl;
            } 
        	return 0;
        }
        
        • 1