求助:本地和Luogu结果不一样
查看原帖
求助:本地和Luogu结果不一样
1305692
xiangixuan楼主2025/7/19 14:30

WA 60pts.

将WA的#5下载下来,发现本地运行结果正确???

正在比较文件 C:\USERS\ADMINISTRATOR\DESKTOP\TASKS\my.out 和 C:\USERS\ADMINISTRATOR\DESKTOP\TASKS\P11232_5.OUT
FC: 找不到差异

本地Win7环境,代码中出现了特性? 还是运算精度问题?

求解答QwQ

#include<bits/stdc++.h>
#define int long long
#define ldb long double
#define N 1000005
using namespace std;

int t, n, m, len, lim, p[N];

struct Seg {
	int l, r;
	bool operator<(const Seg &b) const {
		if(r!=b.r) return r<b.r;
		return l<b.l;
	}
};

signed main() {
	freopen("P11232_5.in", "r", stdin);
	freopen("my.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	cin >> t;
	while(t--) {
		cin >> n >> m >> len >> lim;
		int ans[2]={0, 0};
		vector<Seg> f, g;
		
		for(int i=1; i<=n; ++i) {
			int d, v, a;
			cin >> d >> v >> a;
			int l=0, r=-1;
			if(a>0) {
				ldb t=1.0*(lim-v)/a;
				l=floor(1.0*t*(2.0*v+t*a)/2)+d+1;
				l=max(d, l), r=len;
			} else if(a<0) {
				ldb t=1.0*(lim-v)/a;
				r=ceil(1.0*t*(2.0*v+t*a)/2)+d-1;
				l=d, r=min(r, len);
			} else if(v>lim) l=d, r=len;
			if(l<=r) f.push_back({l, r});
		}
		for(int i=1; i<=m; ++i) cin >> p[i];
		sort(p+1, p+m+1);
		
		for(int i=0; i<f.size(); ++i) {
			int l=f[i].l, r=f[i].r;
			int q=lower_bound(p+1, p+m+1, l)-p;
			if(1<=q && q<=m && l<=p[q] && p[q]<=r)
				++ans[0], g.push_back({l, r});
		}
		sort(g.begin(), g.end());
		
		p[0]=-1;
		for(int i=0, j=0; i<g.size(); ++i) {
			int l=g[i].l, r=g[i].r;
			if(l<=p[j]) continue;
			while(j<=m && p[j]<=r) ++j;
			--j, ++ans[1];
		}
		ans[1]=m-ans[1];
		cout << ans[0] << ' ' << ans[1] << '\n';
	}
	return 0;
}
2025/7/19 14:30
加载中...