社区讨论
60玄关求调
P11232[CSP-S 2024] 超速检测参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjax6qg
- 此快照首次捕获于
- 2025/11/03 23:35 4 个月前
- 此快照最后确认于
- 2025/11/03 23:35 4 个月前
RT
应该是第一问出了问题,和答案差个1、2
CPP#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int L_=1e6+10;
int t,n,m,L,V;
int d[N],v[N],a[N];
int p[N],pre[L_],l[L_];
bool f[N];
struct node{
int l;
int r;
};
node s[N];
bool cmp(node x,node y){
return x.l<y.l||x.l==y.l&&x.r>y.r;
}
int main (){
// freopen("P11232_5.in","r",stdin);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> t;
while(t--){
int sum=0,cnt=0,ans=0;
cin >> n >> m >> L >> V;
for(int i=1;i<=n;i++) cin >> d[i] >> v[i] >> a[i];
for(int i=1;i<=m;i++) {
cin >> p[i];
pre[p[i]]++,l[p[i]]=p[i];
}
for(int i=1;i<=L;i++) {
if(!l[i]) l[i]=l[i-1];
pre[i]+=pre[i-1];
}
for(int i=1;i<=n;i++){
if(a[i]==0){
if(v[i]>V&&pre[L]-pre[d[i]-1]){
sum++;
s[++cnt].l=d[i],s[cnt].r=L;
}
}else if(a[i]>0){
if(v[i]>V&&pre[L]-pre[d[i]-1]){
sum++;
s[++cnt].l=d[i],s[cnt].r=L;
}else{
double x=double(V*V-v[i]*v[i])/double(2*a[i]);
if(x+d[i]>L) continue;
if(pre[L]-pre[int(ceil(x+d[i]))-1]) {
sum++;
s[++cnt].l=ceil(x+d[i]),s[cnt].r=L;
}
}
}else{
if(v[i]<=V) continue;
double x=double(V*V-v[i]*v[i])/double(2*a[i]);
int tmp=x+d[i];
if(tmp>L) tmp=L;
if(pre[tmp]-pre[d[i]-1]) {
sum++;
s[++cnt].l=d[i],s[cnt].r=tmp;
}
}
}
cout << sum << ' ';
sort(s+1,s+cnt+1,cmp);
int minn=0x3f3f3f3f;
for(int i=cnt;i>=1;i--)
if(s[i].r<minn) minn=s[i].r,f[i]=true;
int rt=-1;
for(int i=1;i<=cnt;i++){
if(f[i]&&rt<s[i].l){
ans++;
rt=l[s[i].r];
}
}
cout << m-ans << '\n';
for(int i=1;i<=n;i++)
d[i]=a[i]=v[i]=f[i]=s[i].l=s[i].r=0;
for(int i=1;i<=m;i++) p[i]=0;
for(int i=0;i<=L;i++) pre[i]=l[i]=0;
}
return 0;
}
代码有点抽象
回复
共 0 条回复,欢迎继续交流。
正在加载回复...