Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33445 | LYLAKIOIAKIOI | 【BJ】T2 | C++ | 运行出错 | 0 | 0 MS | 256 KB | 2116 | 2024-10-09 13:52:37 |
#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 using namespace std; const int N=2e6+10,B=1000,mod=1e9+7; 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=1000;//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; }ans*=C;return ans; }int qp(int a,int b){ int x=1; while(b){ if(b&1) x=1ll*x*a%mod; b>>=1;a=1ll*a*a%mod; }return x; }int calc2(int p,int a,int id){ int lim=min(B,A[id]); int tmp1=1ll*p*qp(c,mod-2)%mod,tmp2=1ll*P[id]*qp(c,mod-2); }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; }