【题解】 牛客 2021NOIP提高组模拟赛四 A(权限题)
考虑一个人的期望排名:
观察这个式子,发现可以先将所有的期望得分加入一个数组,sort一遍,然后就可以二分在
注意需要把第
贴一下我刚了两个多小时的代码:
#include<bits/stdc++.h>
#define ll long long
// #define int long long
#define lc(k) k<<1
#define rc(k) k<<1|1
using namespace std;
const int MAX=1e5+10;
const int MOD=1e9+7;
inline char readchar() {
static char buf[100000], *p1 = buf, *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {
#define readchar getchar
int res = 0, f = 0;
char ch = readchar();
for(; !isdigit(ch); ch = readchar()) if(ch == '-') f = 1;
for(; isdigit(ch);ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0');
return f ? -res : res;
}
inline void write(int x) {
if(x<0){putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int a[MAX][2],qw[MAX][5],ans[MAX],jl[MAX][5];
struct node
{
int fs,id;
friend bool operator < (node x,node y)
{
return x.fs>y.fs;
}
}cj[MAX*4];
signed main()
{
int n=read();
for(int i=1;i<=n;i++)
{
a[i][0]=read();a[i][1]=read();
cj[i*4-3].fs=qw[i][1]=a[i][0]+a[i][1];
cj[i*4-2].fs=qw[i][2]=a[i][1];
cj[i*4-1].fs=qw[i][3]=a[i][0];
cj[i*4].fs=qw[i][4]=0;
cj[i*4-3].id=cj[i*4-2].id=cj[i*4-1].id=cj[i*4].id=i;
}
sort(cj+1,cj+1+n*4);
for(int i=1;i<=n;i++)
{
int sum=0;
for(int j=1;j<=4;j++)
{
int t=lower_bound(cj+1,cj+1+4*n,(node){qw[i][j],0})-cj-1;
sum+=t;jl[i][j]=t;ans[i]=sum;
}
}
for(int i=1;i<=n*4;i++)
for(int j=1;j<=4;j++)
if(i<=jl[cj[i].id][j])
ans[cj[i].id]--;
for(int i=1;i<=n;i++) printf("%.10lf\n",1.0+ans[i]/16.0);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术