WA 60pts.
将WA的#5下载下来,发现本地运行结果正确???
正在比较文件 C:\USERS\ADMINISTRATOR\DESKTOP\TASKS\my.out 和 C:\USERS\ADMINISTRATOR\DESKTOP\TASKS\P11232_5.OUT
FC: 找不到差异
本地Win7环境,代码中出现了特性? 还是运算精度问题?
#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;
}