题目
分析
-
因为有分两种时间,显然是个二分
-
检验是否S1<=S2
代码
1 #include<iostream>
2 using namespace std;
3 int t,n,m;
4 int a[100001][2],b[100001][2];
5 int ans;
6 int main ()
7 {
8 cin>>t>>n;
9 for (int i=1;i<=n;i++)
10 cin>>a[i][0]>>a[i][1];
11 cin>>m;
12 for (int i=1;i<=m;i++)
13 cin>>b[i][0]>>b[i][1];
14 int l=1,r=t,mid;
15 while (l<=r)
16 {
17 mid=(l+r)/2;
18 int s1=0,s2=0,t1=mid,t2=t-mid;
19 for (int i=1;i<=n;i++)
20 {
21 if (t1>=a[i][0])
22 s1+=1+(t1-a[i][0])/a[i][1];
23 }
24 for (int i=1;i<=m;i++)
25 {
26 if (t2>=b[i][0])
27 s2+=1+(t2-b[i][0])/b[i][1];
28 }
29 if (s1<=s2)
30 {
31 ans=mid;
32 l=mid+1;
33 }
34 else r=mid-1;
35 }
36 cout<<ans;
37 }