社区讨论
求助
学术版参与者 3已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 14 条
- 当前快照
- 1 份
- 快照标识符
- @mhiza3xi
- 此快照首次捕获于
- 2025/11/03 18:09 4 个月前
- 此快照最后确认于
- 2025/11/03 18:39 4 个月前
2024csp-s,t2 大样例全过,下载测试点第一个一模一样,提交0分?提示Wrong answer,Too short on line 2,求助各位大佬
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
const int M=1e6+20;
struct node{
int l,r;
bool operator <(const node& a) const{
if(r==a.r)return l<a.l;
return r<a.r;
};
};
int t;
int d[N]={},v[N]={},a[N]={},vis[N]={},vis1[M]={},sum[M]={},p[N]={};
double s[N]={};
node b[N]={};
inline int read(){
int x=0,f=1;
char ch=getchar();
while (ch<'0' || ch>'9') {
if(ch=='-')f=-1;
ch=getchar();
}
while (ch>='0' && ch<='9') {
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int main(){
cin>>t;
while(t--){
int n,m,L,V;
cin>>n>>m>>L>>V;
for(int i=1;i<=n;i++){
d[i]=read();v[i]=read();a[i]=read();
if(a[i]>0){
if(v[i]<=V)s[i]=((V*V-v[i]*v[i])*1.0)/(2*a[i]*1.0);
}else{
if(v[i]>V)s[i]=((V*V-v[i]*v[i])*1.0)/(2*a[i]*1.0);
}
}
for(int i=1;i<=m;i++){
cin>>p[i];
vis1[p[i]]++;
}
for(int i=1;i<=M;i++)sum[i]=sum[i-1]+(vis1[i]>0);
for(int i=1;i<=n;i++){//处理超速区间
if(a[i]==0){
if(v[i]>V){
b[i].l=d[i];b[i].r=L;
}else {
vis[i]=1;
b[i].l=b[i].r=0;
}
}else if(a[i]>0){
if(v[i]>V){
b[i].l=d[i];b[i].r=L;
}else{
b[i].l=floor(d[i]+s[i]+1);b[i].r=L;
}
}else{
if(v[i]>V){
b[i].l=d[i];b[i].r=ceil(d[i]+s[i]-1);
}else {
vis[i]=1;
b[i].l=b[i].r=0;
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
if(vis[i] || b[i].r<b[i].l)continue;
if(sum[b[i].r]-sum[b[i].l-1]>0)ans++;
else {
vis[i]=1;
b[i].l=b[i].r=0;
}
}
sort(b+1,b+1+n);
int k=0,cnt=0;
p[0]=0;
for(int i=1;i<=n;i++){
if(b[i].l>b[i].r || !b[i].l || !b[i].r)continue;
if(b[i].l>p[k]){
int l=1,r=m;
while (l<=r) {
int mid=(l+r)>>1;
if(p[mid]<=b[i].r){
l=mid+1;k=mid;
}else{
r=mid-1;
}
}
cnt++;
}
}
cout<<ans<<" "<<m-cnt<<endl;
for(int i=1;i<=N;i++)d[i]=a[i]=v[i]=vis[i]=p[i]=0;
for(int i=1;i<=M;i++)vis1[i]=sum[i]=0;
}
return 0;
}
回复
共 14 条回复,欢迎继续交流。
正在加载回复...