Runtime Error

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
    string s;
    ll q;
}a[105];
bool cmp(node x,node y){
    return x.q>y.q;
}
ll n,m,k;
string b;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].s;
    }
    for(int i=1;i<=n;i++){
        cin>>m>>k;
        a[i].q+=m%k;
        for(int j=1;j<=k;j++){
            cin>>b;
            for(int f=1;f<=n;f++){
                if(a[f].s==b) a[f].q+=m%k;
            }
        }
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].s<<" "<<a[i].q<<"\n";
    }
    return 0;
}

2 条评论

  • @ 2026-5-29 22:27:37
    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    // 学生结构体:保存姓名、最终金额、原始学号(用于金额相同时排序)
    struct node{
        string s;    // 姓名
        ll q;        // 最终拥有的钱数
        int id;      // 原始学号(输入顺序,从1开始)
    }a[105];         // 最多100个学生
    
    // 自定义排序规则
    bool cmp(node x, node y){
        if(x.q != y.q){
            return x.q > y.q;  // 优先按钱数从大到小排序
        }else{
            return x.id < y.id; // 钱数相同时,按原始学号从小到大排序
        }
    }
    
    int main(){
        int n; // 班级人数(用int足够,n≤100)
        cin >> n;
        
        // 输入n个学生的姓名,并记录原始学号
        for(int i=1; i<=n; i++){
            cin >> a[i].s;
            a[i].id = i;        // 保存输入顺序作为学号
            a[i].q = 0;         // 初始化金额为0
        }
        
        // 处理每个学生的送礼信息
        for(int i=1; i<=n; i++){
            ll m;  // 该同学准备用来送礼的总钱数
            int k; // 要送给的朋友数量
            cin >> m >> k;
            
            // 处理k=0的边界情况,避免除以零错误
            if(k == 0){
                a[i].q += m;    // 没有朋友,所有钱自己保留
                continue;       // 跳过后续送礼流程
            }
            
            ll per = m / k;     // 每个朋友能收到的钱数(整数除法)
            ll remain = m % k;  // 分完后剩下的钱,自己保留
            
            a[i].q += remain;   // 自己保留余数
            
            // 给每个朋友转账
            for(int j=1; j<=k; j++){
                string b;
                cin >> b;
                // 查找对应姓名的学生,给他加上per元
                for(int f=1; f<=n; f++){
                    if(a[f].s == b){
                        a[f].q += per;
                        break;  // 找到后立即跳出循环,提高效率
                    }
                }
            }
        }
        
        // 按自定义规则排序
        sort(a+1, a+n+1, cmp);
        
        // 输出结果
        for(int i=1; i<=n; i++){
            cout << a[i].s << " " << a[i].q << "\n";
        }
        
        return 0;
    }
    
    • @ 2026-5-21 17:26:45

      😶

      • 1

      信息

      ID
      5080
      时间
      ms
      内存
      MiB
      难度
      2
      标签
      递交数
      5
      已通过
      1
      上传者