1 条题解

  • 0
    @ 2026-5-3 0:28:10

    换个思路来理解这道题会发现,让机器人边运送边克隆太麻烦了,我们可以在出发前一次性克隆好所有机器人,而运送一个窗口所需要的机器人数量等于它之前所有障碍的高度加上窗口自身高度,所以我们可以遍历一遍算出每个窗口所需机器人数量,再从小到大排序,直接计算哪种机器人数量的情况下利润最大就行了。不懂怎么实现的的可以看代码。

    AC CODE

    #include <bits/stdc++.h>
    using namespace std;
    long long he = -1,ans,n,m,c,p,t[200005],h[200005],ch[200005],cnt;//he为障碍总高度,因为初始有一个机器人,为了方便计算所以赋值-1。
    int main(){
    	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    	cin >> n >> m >> c >> p;
    	for(long long i = 1;i <= n+m;i++){
    		cin >> t[i] >> h[i];
    		if(t[i] == 1) he+=h[i];
    		else{
    			cnt++;
    			ch[cnt] = he+h[i]; //窗口所需机器人数量=障碍总高度+窗口高度。
    		}
    	}
    	sort(ch+1,ch+cnt+1);//从小到大排序。
    	for(long long i = 1;i <= cnt;i++){
    		ans = max(p*i-ch[i]*c,ans);//当一个窗口可以满足时,比它消耗机器人少的窗口也能取到,所以满足的数量是i。
    	}
    	cout << ans << endl;
    } 
    
    • 1

    信息

    ID
    7574
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者