社区讨论
80pts 求调 wrong on #8 and #10
P11232[CSP-S 2024] 超速检测参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m2u9efgi
- 此快照首次捕获于
- 2024/10/29 17:42 去年
- 此快照最后确认于
- 2025/11/04 15:44 4 个月前
CPP
#include <iostream>
#include <cmath>
#include <algorithm>
#define maxn 100001
using namespace std;
struct car{
int d,v,a;
}s[maxn];
struct que{
int l,r,op;
}q[maxn];
int n,m,l,v,t,ans,lamp[maxn];
void pre(){
int i;
ans=0;
cin>>n>>m>>l>>v;
for(i=1;i<=n;i++){
cin>>s[i].d>>s[i].v>>s[i].a;
}
for(i=1;i<=m;i++){
cin>>lamp[i];
}
}
int check(int p){
int l=1,r=m,mid;
while(l!=r){
mid=(l+r)>>1;
if(lamp[mid]>p) r=mid;
else if(lamp[mid]<p) l=mid+1;
else return mid;
}
return l;
}
bool cmp(que a,que b){
if(a.l==b.l) return a.r<b.r;
return a.l>b.l;
}
void solve(){
int i,j,k;
for(i=1;i<=n;i++){
if(s[i].d>lamp[m]) continue;
if(s[i].a>0){
if(s[i].v>v){
ans++;
q[ans].l=check(s[i].d),q[ans].r=m;
}
else{
if(v==s[i].v) j=s[i].d+1;
else j=(v*v-s[i].v*s[i].v)/(2*s[i].a)+1+s[i].d;
if(j<=lamp[m]){
ans++;
q[ans].l=check(j),q[ans].r=m;
}
}
}
if(s[i].a==0){
if(s[i].v>v){
ans++;
q[ans].l=check(s[i].d),q[ans].r=m;
}
}
else{
if(s[i].v>v){
//cout<<i<<"\n";
j=check(s[i].d);
k=(double)((double)(v*v-s[i].v*s[i].v)/(double)(2*s[i].a))+(double)0.99999999999+(double)s[i].d;
//cout<<j<<" "<<k<<"\n";
if(lamp[j]<k){
ans++;
q[ans].l=j;
j=check(k);
if(lamp[j]>=k) j--;
q[ans].r=j;
}
}
}
}
if(ans==0){
cout<<"0 "<<m<<"\n";
return;
}
sort(q+1,q+ans+1,cmp);
//cout<<"lamp"<<endl;
for(i=1,j=m+1;i<=ans;i++){
//cout<<"que "<<q[i].l<<" "<<q[i].r<<"\n";
if(j>q[i].r){
j=q[i].l;
m--;
//cout<<j<<endl;
}
}
cout<<ans<<" "<<m<<"\n";
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
pre();
solve();
}
}
错了 #8 (a<0) 的情况 感觉是那一部分写假了,但找不到问题,求调。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...