求测试点 #1 数据或 hack
查看原帖
求测试点 #1 数据或 hack
552286
流光萤影楼主2023/10/17 20:12

或者给这份代码一个 hack

#include<bits/stdc++.h>
using namespace std;int t,r,c[200005],n,p[200005],cnt1,cnt2;long long ans,tmp1,tmp2,q1[200005],q2[200005];
bool cmp(int x,int y)
{
	if(c[x] > 0 && c[y] > 0 || c[x] < 0 && c[y] < 0) return x < y;
	return c[x] > c[y];
}
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	for(cin >> t;t;--t)
	{
		cin >> n;ans = cnt1 = cnt2 = tmp1 = tmp2 = 0;
		for(int i(1);i <= n;++i) cin >> r,p[i] = i;
		for(int i(1);i <= n;++i) cin >> c[i];
		sort(p+1,p+1+n,cmp);
		for(int i(1);i <= n;++i)
		{
			if(p[i] > i) ans += c[p[i]];
			else if(p[i] < i) ans -= c[p[i]];
			else if(c[p[i]] > 0) q1[++cnt1] = q1[cnt1]+c[p[i]];
			else if(c[p[i]] < 0) q2[++cnt2] = q2[cnt2]+c[p[i]];
		}
		int i(1); 
		if(cnt1 >= 2) for(int j(1);i <= n && (j^cnt1);++i) if(!(p[i]^i) && c[p[i]] > 0) tmp1 = max(tmp1,q1[cnt1]-q1[j]-c[p[i]]),++j;
		if(cnt2 >= 2) for(int j(1);i <= n && (j^cnt2);++i) if(!(p[i]^i) && c[p[i]] < 0) tmp2 = max(tmp2,q2[j]+c[p[i]]-q2[cnt2]),++j;
		cout << ans+tmp1+tmp2 << "\n";
	}
}

感谢!

2023/10/17 20:12
加载中...