Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33498 liuyile 【BJ】T2 C++ 运行超时 90 5171 MS 47148 KB 3844 2024-10-09 18:53:44

Tests(9/10):


// #pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; #define endl "\n" #define int long long // #define double long double #define pii pair<int,int> #define p1(x) x.first #define p2(x) x.second int pr[2000003]; double p[2003000]; int a[2000300]; int n,m,c; const int M=1e9+7; inline bool cmp(int x,int y){ return p[x]>p[y]; } inline int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } inline int qp(int a,int x){ int res=1; while(x){ if(x&1)res=res*a%M; a=a*a%M; x>>=1; } return res; } inline int inv(int x){return qp(x,M-2);} inline double qp(double a,int x){ double res=1; while(x){ if(x&1)res=res*a; a=a*a; x>>=1; } return res; } inline double calceq(double p,int a,double q,int b){ return qp(p,b-1)*qp(q,a-1)*(1-p)*(1-q)/(1-qp(p,b)*qp(q,a)); } // inline double CALC(double p,int a,double q,int b); // inline double calc(double p,int a,double q,int b){ // int t=gcd(a,b); // a/=t,b/=t; // int k=0,c=0; // if(a)k=b/a,c=b%a; // // cerr<<p<<" "<<a<<" "<<q<<" "<<b<<" "<<k<<" "<<c<<" "<<1/(1-q)-1<<endl;cerr.flush(); // if(k!=0) // return calc(p,a,q*qp(p,k),c); // else if(c==0){} // else{ // double x=CALC(q,b,p,a); // // cerr<<x<<" "; // x=(1-x-calceq(p,a,q,b)); // // cerr<<x<<"!"<<p<<" "<<a<<" "<<q<<" "<<b<<" "<<calceq(p,a,q,b)<<endl;cerr.flush(); // return x*q/(1-q); // } // } // const double eps =1e-8; // inline double CALC(double p,int a,double q,int b){ // if(q<eps)return qp(p,a/b); // return (1-q)/q*calc(p,a,q,b); // } const double eps=1e-8; inline double calc(double p,int a,double q,int b){ int t=gcd(a,b); a/=t,b/=t; if(q<eps&&b)return qp(p,a/b); int k=b/a,c=b%a; if(k){ double t=(1-q)/q; q=q*qp(p,k); return t*q/(1-q)*calc(p,a,q,c); } else if(c==0)return 1; return 1-calc(q,b,p,a)-calceq(p,a,q,b); } inline int calceqm(int p,int a,int q,int b){ return qp(p,b-1)*qp(q,a-1)%M*(1-p+M)%M*(1-q+M)%M*inv((1-qp(p,b)*qp(q,a)%M+M))%M; } inline int calcm(int p,int a,int q,int b){ // cerr<<p<<" "<<a<<" "<<q<<" "<<b<<endl; // cerr.flush(); int t=gcd(a,b); a/=t,b/=t; if(q<eps&&b)return qp(p,a/b); int k=b/a,c=b%a; if(k){ int t=(1-q+M)*inv(q)%M; q=q*qp(p,k)%M; return t*q%M*inv(1-q+M)%M*calcm(p,a,q,c)%M; } else if(c==0)return 1; return (1-calcm(q,b,p,a)-calceqm(p,a,q,b)+2*M)%M; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); // int C=clock(); // freopen("genshin.in","r",stdin); // freopen("genshin.out","w",stdout); // cout<<calc(0.333333,2,0.666667,1)<<endl; // return 0; int t; cin>>t; while(t--){ cin>>n>>m>>c; for(int i=1;i<=n;i++) cin>>p[i]>>a[i],pr[i]=i;//p[i]/=c; sort(pr+1,pr+n+1,cmp); vector<int>T; int mx=0; for(int i=1;i<=n;i++) if(a[pr[i]]>mx){ mx=a[pr[i]]; T.push_back(pr[i]); } for(int i=1;i<=m;i++){ double q; int b; cin>>q>>b; // q/=c; int x=0; double mx=0; for(int i:T){ double w=calc(p[i]/c,a[i],q/c,b); // cerr<<i<<" "<<w<<" "<<p[i]<<" "<<a[i]<<" "<<q<<" "<<b<<endl; // return 0; if(w>mx)mx=w,x=i; } printf("%lld %.10lf %lld\n",x,mx,calcm((int)p[x]*inv(c)%M,a[x],(int)q*inv(c)%M,b)); // return 0; } } cout.flush(); return 0; }


测评信息: