完全弹性碰撞可以视作互相穿过

所以直接考虑只有单个小球的时候,从板子上滑下所需要的时间即可

最后以30000为界分开流读入与缓冲区优化的io方法

//Case4用缓冲区io优化会WA??

#pragma GCC optimize(3)
#include<iostream>
#include<algorithm>
#include<cctype>
using namespace std;
int pos[1000000],dir[1000000],ans[1000000];
const int bsz=1<<16;
char bf[bsz],*head,*tail;
inline char gc()
{
    if(head==tail)
    {
        int l=fread(bf,1,bsz,stdin);
        tail=(head=bf)+l;
    }
    return *head++;
}
inline int read()
{
    int x=0,f=1;char c=gc();
    for(;!isdigit(c);c=gc())
        if(c=='-')
            f=-1;
    for(;isdigit(c);c=gc())
        x=x*10+c-'0';
    return x*f;
}
inline void write(int x)
{
    if(x>=10)
        write(x/10);
    putchar(x%10+'0');
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int i,vd,nl,n,m,L;
    cin>>n>>m>>L;
    if(n>30000)
    {
        for(i=0;i<n;i++)
            pos[i]=read();
        for(i=0;i<n;i++)
            dir[i]=read();
        for(i=0;i<n;i++)
        {
            vd=read();
            if(dir[i])
                nl=L+1-pos[i];
            else 
                nl=pos[i];
            ans[i]=nl/vd+(nl%vd?1:0);
        }
        sort(ans,ans+n);
        write(ans[n-m-1]);
    }
    else
    {
        for(i=0;i<n;i++)
            cin>>pos[i];
        for(i=0;i<n;i++)
            cin>>dir[i];
        for(i=0;i<n;i++)
        {
            cin>>vd;
            if(dir[i])
                nl=L+1-pos[i];
            else 
                nl=pos[i];
            ans[i]=nl/vd+(nl%vd?1:0);
        }
        sort(ans,ans+n);
        cout<<ans[n-m-1];
    }
    
    return 0;
}

 

相关文章:

  • 2018-03-19
  • 2019-08-11
  • 2021-11-24
  • 2022-12-23
  • 2021-07-13
  • 2022-12-23
  • 2022-01-03
  • 2021-11-04
猜你喜欢
  • 2021-07-12
  • 2021-09-14
  • 2021-11-15
  • 2022-12-23
  • 2021-10-08
  • 2021-06-12
  • 2021-09-12
相关资源
相似解决方案