1 条题解

  • 0
    @ 2025-7-31 14:54:58
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 2e5 + 5, M = 1e9 + 5;
    int T, n, h[N], a[N], t[N], p[N];
    double q1 = -1, q2 = N;
    int work() {
        cin>>n;
        for(int i = 1; i <= n; i++) cin>>h[i];
        for(int i = 1; i <= n; i++) cin>>a[i];
        for(int i = 1; i <= n; i++) {
            cin>>t[i];
            p[t[i] + 1] = i;
        }
        if(n == 1) return 0;
        q1 = -1, q2 = M;
        for(int i = 1; i < n; i++) {
        	int x = p[i], y = p[i + 1];
    		if(a[x] > a[y]) q1 = max(q1, 1.0 * (h[y] - h[x]) / (a[x] - a[y]));
    		else if(a[x] < a[y]) q2 = min(q2, 1.0 * (h[y] - h[x]) / (a[x] - a[y]));
    		else if(h[x] <= h[y]) return -1; 	
    	}
        if(q1 < q2) {
    		double r = floor(q1) + 1; 
    		if(r < q2) return r;
    		else return -1;
    	} else return -1;
    }
    signed main() {
        cin>>T;
        while(T--) cout<<work()<<endl;
        return 0;
    }
    • 1

    信息

    ID
    103
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    21
    已通过
    4
    上传者