提交时间:2024-10-09 15:59:47
运行 ID: 33468
#include<bits/stdc++.h> #define ll long long #define PII pair<int,int> #define P3I pair<int,PII> #define mk make_pair #define fi first #define se second #define double long double using namespace std; const int N=2e6+10; double eps=1e-10; int n,m,c; int P[N],A[N]; int tp=0; struct nd{ int id,p,a; }b[N]; bool cmp(nd a,nd b){ return a.p<b.p; } set<PII> q; int fl=0; double calc(int p,int a,int id){ int lim=100000;//if(fl) lim=80; double C=(1-p*1.0/c)/(p*1.0/c); double e=p*1.0/c,tmp=1,tmp2=1;ll la=0; double ans=0; for(int i=1;i<=lim;i++){ tmp*=e; ll now=(1ll*i*a)/A[id]; while(la<now) la++,tmp2*=(P[id]*1.0/c); ans+=tmp*tmp2;if(fabs(tmp*tmp2)<eps) break; }ans*=C;return ans; }void slv(){ scanf("%d%d%d",&n,&m,&c); if(n>=200) fl=1; //cin>>n>>m>>c; int p,a;tp=0; for(int i=1;i<=n;i++) scanf("%d%d",&P[i],&A[i]); for(int i=1;i<=n;i++) b[i]=(nd){i,P[i],A[i]}; sort(b+1,b+n+1,cmp);q.clear(); for(int i=1;i<=n;i++){ auto it=q.upper_bound(mk(b[i].a,b[i].id)); while(it!=q.begin()){ q.erase((--it)); it=q.upper_bound(mk(b[i].a,b[i].id)); }q.insert(mk(b[i].a,b[i].id)); }for(auto ed:q){ b[++tp]=(nd){ed.se,P[ed.se],A[ed.se]}; } //cout<<n<<' '<<m<<' '<<c; //m=2; // for(int i=1;i<=m;i++){ //double C=clock(); scanf("%d%d",&p,&a);int mxid=0;double mxvl=0; for(int j=1;j<=tp;j++){ double res=calc(p,a,b[j].id); if(res>mxvl) mxvl=res,mxid=b[j].id; }printf("%d %.10Lf %d\n",mxid,mxvl,0); //fflush(stdout); //fflush(stdout); //cerr<<(clock()-C)/CLOCKS_PER_SEC<<endl; } } int main(){ //double C=clock(); int t;scanf("%d",&t); //t=1; while(t--) slv(); //cerr<<(clock()-C)/CLOCKS_PER_SEC; }