debug到自闭

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cmath>
 4 using namespace std;
 5 typedef long long LL;
 6 const int N = 1010;
 7 LL A[N];
 8 LL B[N];
 9 LL so_A[N * N];
10 LL n,m,L,R;
11 int t = 0;
12 LL check1(LL num){
13     LL l = 0,r = t - 1;
14     while(l < r){
15         LL mid = (l + r) >> 1;
16         if(so_A[mid] >= num)r = mid;
17         else l = mid + 1;
18     }
19     if(so_A[r] < num)return -1;
20     //cout << "11 " << r << " 11" << endl;
21     return r;
22 }
23 LL check2(LL num){
24     LL l = 0,r = t - 1;
25     while(l < r){
26         LL mid = (l + r + 1) >> 1;
27         if(so_A[mid] <= num)l = mid;
28         else r = mid - 1;
29     }
30     //cout << "22 " << r << " 22" << endl;
31     if(so_A[r] > num)return -1;
32     return r;
33 }
34 int main(){
35     cin >> n >> m >> L >> R;
36     for(int i = 1;i <= n;i ++)cin >> A[i];
37     for(int i = 1;i <= m;i ++)cin >> B[i];
38     for(int i = 1;i <= n;i ++){
39         A[i] += A[i - 1];
40         //cout << A[i] << endl;
41     }
42     for(int i = 1;i <= m;i ++){
43         B[i] += B[i - 1];
44     }
45     for(int i = 1;i <= n;i ++){
46         for(int j = i;j <= n;j ++){
47             so_A[t ++] = A[j] - A[i - 1];
48         }
49     }
50     sort(so_A,so_A + t);
51     LL ans = 0;
52     for(int i = 1;i <= m;i ++){
53         for(int j = i;j <= m;j ++){
54             LL x = B[j] - B[i - 1];
55             LL l = L / x;
56             LL r = R / x;
57             LL t1,t2;
58             if(l * x == L)t1 = l;
59             else t1 = l + 1;
60             t2 = r;
61             //cout << t1 << " " << t2 << endl;
62             LL d1 = check1(t1);
63             LL d2 = check2(t2);
64             if(d2 == -1)continue;
65             if(d1 == -1)continue;
66             ans += (d2 - d1 + 1);
67         }
68     }
69     cout << ans << endl;
70     return 0;
71 }

知道是二分查找后,开始做题,然后一直wa,此次经历告诉我,二分题边界一定要找好,调自闭了...

猜你喜欢

转载自www.cnblogs.com/youjiu/p/10888694.html