WA on test_52.txt,仅WA一个,赛时连吃6发破防了。
#include <bits/stdc++.h>
//#include <windows.h>
#define ED cerr<<endl;
#define TS cerr<<"I AK IOI"<<endl;
#define cr(x) cerr<<x<<endl;
#define cr2(x,y) cerr<<x<<" "<<y<<endl;
#define cr3(x,y,z) cerr<<x<<" "<<y<<" "<<z<<endl;
#define cr4(x,y,z,w) cerr<<x<<" "<<y<<" "<<z<<" "<<w<<endl;
#define pii pair<int,int>
#define epb emplace_back
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define int long long
//#define ull unsigned long long
using namespace std;
const int N=105,INF=2e9,mod=1e9+7;
int n,x;
struct node {
int a,p,b,q;
}a[N];
bool check(int mid) {
int sum=0;
for(int i=1;i<=n;++i) {
int qwq=2e16,cnt=(mid-1)/a[i].a+1;
for(int j=0;j<=12000;++j) {
int cnt2=(mid-(cnt-j)*a[i].a-1)/a[i].b+1;
if(mid-(cnt-j)*a[i].a<=0) cnt2=0;
qwq=min(qwq,(cnt-j)*a[i].p+cnt2*a[i].q);
}
sum+=qwq;
//cr4(mid,cnt,sum,qwq)
}
return sum<=x;
}
signed main()
{
scanf("%lld%lld",&n,&x);
for(int i=1;i<=n;++i) {
scanf("%lld%lld%lld%lld",&a[i].a,&a[i].p,&a[i].b,&a[i].q);
if(a[i].p*a[i].b>a[i].q*a[i].a) {
swap(a[i].p,a[i].q);
swap(a[i].a,a[i].b);
}
}
int l=1,r=1e11,ans=0;
while(l<=r) {
int mid=l+r>>1;
if(check(mid)) l=mid+1,ans=mid;
else r=mid-1;
}
printf("%lld\n",ans);
return 0;
}