@exut
2024-11-14T02:54:00.000000Z
字数 808
阅读 122
考试总结
不嘻嘻
心态裂开了
挂挂挂
简单期望,可以对 个数排序,然后算每个数的期望排名乘上权值,遇到冲突的数就暂时剔除冲突那个概率算完加回去就好了
傻逼出题人卡常,上个快读才过
#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e7+5;const int mod=1e9+7;int read(){int a=0,s=0,c=getchar();while(!isdigit(c)) s|=(c=='-'),c=getchar();while(isdigit(c)) a=a*10+c-48,c=getchar();return a;}struct node{int val;int p;int id;}w[N];bool cmp(node x,node y){return x.val<y.val;}int n;int cut[N];signed main(){freopen("good.in","r",stdin);freopen("good.out","w",stdout);n=read();for(int i=1;i<=n;i++){w[i*2-1].val=read();w[i*2].val=read();w[i*2-1].p=read();w[i*2].p=read();w[i*2-1].id=w[i*2].id=i;}sort(w+1,w+2*n+1,cmp);int P=0;int ans=0;for(int i=1;i<=2*n;i++){ans=(ans+((((P+1-cut[w[i].id]+mod)%mod+mod)%mod)*w[i].p%mod)*w[i].val)%mod;cut[w[i].id]=w[i].p;P+=w[i].p,P%=mod;// cout<<P<<endl;}cout<<ans;}