90分的代码,哪里错了?怎么修正?

描述
五一节放假了,小明高高兴兴地去奶奶家玩。在去奶奶家的路上,有n个小池塘,池塘很浅很浅,所以没有危险的。每个池塘中有若干条鱼。抓同一个池塘中的每条鱼的时间是相同的,但抓不同池塘中的鱼的时间可能不同。

为了不让奶奶久等,小明只有t分钟的时间能用来抓鱼。请问小明最多能抓多少条鱼呢?

输入
第一行,有二个整数n和t,表示有n个池塘,小明能使用t分钟时间抓鱼。
n和t之间以一个空格分隔。
第二行,有n个正整数,第i个正整数x表示第i个池塘中有x 条鱼(每二个正整数之间有一个空格)。
第三行,有n个以空格分隔的正整数,第i个正整数y 表示第i个池塘中每抓一条鱼都需要y分钟时间(每二个正整数之间有一个空格)。

输出
只有一行,该行只有一个整数v,表示小明最多能抓v条鱼。

输入样例 1
3 26
2 1 3
4 5 6
输出样例1
5

提示
【样例解释】
小明可以花8分钟在第1个池塘抓2条鱼,花5分钟时间在第2个池塘抓1条鱼,花12分钟时间在第3个池塘抓2条鱼。
所以小明最多可以抓5条鱼。

【数据范围】
20%的数据,
1≤n≤3;

80%的数据,
1≤n≤10001≤n≤1000;

100%的数据,
1≤n≤100000,1≤t≤5000000000。

以下是我的代码,只拿到了90分,哪里错了,欢迎修正:

#include <iostream>
#include <algorithm>
using namespace std;
struct node {
    int x;
    int y;
};
bool cmp(node a, node b) {
    return a.y < b.y;
}
int main(){
    int n, t;
    cin >> n >> t;
    node a[n];
    for(int i = 0; i < n; i++) {
        cin >> a[i].x;
    }
    for(int i = 0; i < n; i++) {
        cin >> a[i].y;
    }
    sort(a,a+n,cmp);
    int ans = 0;
    for(int i = 0; i < n; i++) {
        if(t >= a[i].y) {
            int fsn = min(t/a[i].y, a[i].x);
            ans += fsn;
            t -= fsn * a[i].y;
        }
    }  
    cout << ans;
    return 0;
}

代码,修改见注释:

#include <bits/stdc++.h>
using namespace std;
struct node {
    int x;
    int y;
};
bool cmp(node a, node b) {
    return a.y < b.y;
}
int main(){
    int n, t;
    cin >> n >> t;
    node a[n+1];
    for(int i = 0; i < n; i++) {
        cin >> a[i].x;
    }
    for(int i = 0; i < n; i++) {
        cin >> a[i].y;
    }
    sort(a,a+n,cmp);
    int ans = 0;
    for(int i = 0; i < n; i++) {
       // if(t >= a[i].y) { 这里
               int time = min(t,a[i].y*a[i].x);  //这里 
            int fsn = min(time/a[i].y,a[i].x);  //这里 
            ans += fsn;
            t -= fsn * a[i].y;
       // }
    }  
    cout << ans;
    return 0;
}

我还是一名小学生,比较喜欢C++,有啥不会的可以问我哈。

cmp 函数中应该是 return a.y < b.y,您写成了a.y > b.y,导致排序顺序错误。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^