样例一能过,剩下两个样例部分输出与答案相差一小点,或者有解输出的无解
#include <bits/stdc++.h>
#define int long long
using namespace std;
int ans, n, k, x, y, s[100005], t[100005];
int a1;
void case1(int i)
{
int a = 0;
if(s[n] + t[n] - n * k > 0)
{
a = (i * k + x + y - t[i] - s[i]) / (s[n] + t[n] - n * k);
if(a > 0) a = 0;
}
if(s[n] + t[n] - n * k < 0)
{
a = ceil(1.0 * (i * k + x + y - t[i] - s[i]) / (s[n] + t[n] - n * k));
// a1 = (i * k + x + y - t[i] - s[i] + s[n] + t[n] - n * k - 1) / (s[n] + t[n] - n * k);
// if(a != a1) cout << a<<" "<<a1 << endl;
}
// cout << "1 "<< a << " " << i << endl;
if(a >= 0 && a * s[n] + s[i] - x >= 0 && a * t[n] + t[i] - y >= 0 && a * s[n] + s[i] - x + a * t[n] + t[i] - y <= a * n * k + i * k)
ans = min(ans,a * n + i);
}
void case2(int i)
{
int a = 0;
if(s[n] - t[n] - n * k > 0)
{
a = (i * k + x - y + t[i] - s[i]) / (s[n] - t[n] - n * k);
if(a > 0) a = 0;
}
if(s[n] - t[n] - n * k < 0)
{
a = ceil(1.0 * (i * k + x - y + t[i] - s[i]) / (s[n] - t[n] - n * k));
// a1 = (i * k + x - y + t[i] - s[i] + s[n] - t[n] - n * k - 1) / (s[n] - t[n] - n * k);
// if(a != a1) cout << a<<" "<<a1 << endl;
}
// cout << "2 "<< a << " " << i << endl;
if(a >= 0 && a * s[n] + s[i] - x >= 0 && a * t[n] + t[i] - y <= 0 && a * s[n] + s[i] - x - a * t[n] - t[i] + y <= a * n * k + i * k)
ans = min(ans,a * n + i);
}
void case3(int i)
{
int a = 0;
if(t[n] - s[n] - n * k > 0)
{
a = (i * k - x - y + t[i] + s[i]) / (t[n] - s[n] - n * k);
if(a > 0) a = 0;
}
if(t[n] - s[n] - n * k < 0)
{
a = ceil(1.0 * (i * k - x - y + t[i] + s[i]) / (t[n] - s[n] - n * k));
// a1 = (i * k - x - y + t[i] + s[i] + t[n] - s[n] - n * k - 1) / (t[n] - s[n] - n * k);
// if(a != a1) cout << a<<" "<<a1 << endl;
}
// cout << "3 "<< a << " " << i << endl;
if(a >= 0 && a * s[n] + s[i] - x <= 0 && a * t[n] + t[i] - y <= 0 && x + y - s[i] - t[i] - a * s[n] - a * t[n] <= a * n * k + i * k)
ans = min(ans,a * n + i);
}
void case4(int i)
{
int a = 0;
if(t[n] - s[n] - n * k > 0)
{
a = (i * k - x + y - t[i] + s[i]) / (t[n] - s[n] - n * k);
if(a > 0) a = 0;
}
if(t[n] - s[n] - n * k < 0)
{
a = ceil(1.0 * (i * k - x + y - t[i] + s[i]) / (t[n] - s[n] - n * k));
// a1 = (i * k - x + y - t[i] + s[i] + t[n] - s[n] - n * k - 1) / (t[n] - s[n] - n * k);
// if(a != a1) cout << a << " " << a1 << endl;
}
// cout << "4 "<< a << " " << i << endl;
if(a >= 0 && a * s[n] + s[i] - x <= 0 && a * t[n] + t[i] - y >= 0 && x - s[i] - a * s[n] + a * t[n] + t[i] - y <= a * n * k + i * k)
ans = min(ans,a * n + i);
}
void solve()
{
scanf("%lld%lld%lld%lld",&n,&k,&x,&y);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&s[i],&t[i]);
s[i] += s[i-1];
t[i] += t[i-1];
}
if(x == 0 && y == 0)
{
cout << 0 << endl;
return;
}
ans = 9e18;
for(int i=1;i<=n;i++)
{
case1(i);
case2(i);
case3(i);
case4(i);
}
if(ans == 9e18)ans = -1;
printf("%lld\n", ans);
}
signed main()
{
int t;cin>>t;
while(t--)solve();
return 0;
}