codevs 1516 平均分数

题目描述 Description
X学校被抽中进行一次数学测验,该学校共有N人,每个人有一个学号,一号学生的学号是1…N号学生的学号是N.
为了减轻统计的负担,该学校只会随机抽取学号连续的k人(1≤k≤n),且将该k人的平均分统计出来。小明已经知道了所有人的成绩,小明想知道,平均分在[L,R]上的概率为多少。
输入描述 Input Description
输入共2行。
第一行为三个正整数,N,L,R.
第二行第i个数为学号为i的学生的成绩。
输出描述 Output Description
输出学生的分数,表示成既约分数。

记sum[i]为前缀和。则需求满足
L<=(sum[i]-sum[j])/(i-j)<=R (j<i)
的数对个数。
对于L<=(sum[i]-sum[j])/(i-j) 变形有:
Li-sum[i]<=Lj-sum[j] (j<i)
令Ai=Li-sum[i]; 统计非严格逆序对个数cntA,得到有多少数对的平均值大于等于L。
对于(sum[i]-sum[j])/(i-j)<=R 我们考虑求出(sum[i]-sum[j])/(i-j)>R,变形有:
Ri-sum[i]<Rj-sum[j] (j<i)
令Bi=Ri-sum[i],统计严格逆序对cntB,得到有多少数对的平均值大于R。
cntA为满足大于L的数对个数,cntB为满足大于R的数对个数
两数相减,即为满足大于L又小于R的数对个数
这里写图片描述

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
long long xl[1245000],sum[1245000];
long long a[1245000],b[1245000];
long long ans1,ans2;
long long temp[1245000];
void merge_sort1(long long l,long long r){
    if(l==r){
        return ;
    }
    long long mid=(l+r)/2;
    merge_sort1(l,mid);
    merge_sort1(mid+1,r);
    long long s=l,t=mid+1,p=l;
    while(s<=mid&&t<=r){
        if(a[s]<a[t]){
            temp[p++]=a[s];
            s++;
        }
        if(a[s]>=a[t]){
            temp[p++]=a[t];
            ans1+=mid-s+1;
            t++;
        }
    }
    while(s<=mid){
        temp[p++]=a[s];
        s++;
    }
    while(t<=r){
        temp[p++]=a[t];
        t++;
    }
    for(long long i=l;i<=r;i++){
        a[i]=temp[i];
    }
}
void merge_sort2(long long l,long long r){
    if(l==r){
        return ;
    }
    long long mid=(l+r)/2;
    merge_sort2(l,mid);
    merge_sort2(mid+1,r);
    long long s=l,t=mid+1,p=l;
    while(s<=mid&&t<=r){
        if(b[s]<=b[t]){
            temp[p++]=b[s];
            s++;
        }
        if(b[s]>b[t]){
            temp[p++]=b[t];
            ans2+=mid-s+1;
            t++;
        }
    }
    while(s<=mid){
        temp[p++]=b[s];
        s++;
    }
    while(t<=r){
        temp[p++]=b[t];
        t++;
    }
    for(long long i=l;i<=r;i++){
        b[i]=temp[i];
    }
}
long long gcd(long long a,long long b){
    if(b==0){
        return a;
    }
    return gcd(b,a%b);
}
int main()
{
    long long n,l,r;
    cin>>n>>l>>r;
    for(long long i=1;i<=n;i++){
        scanf("%lld",&xl[i]);
        sum[i]=xl[i]+sum[i-1];
        a[i]=l*i-sum[i];
        b[i]=r*i-sum[i];
    }
    /*for(long long i=1;i<=n;i++){
        cout<<a[i]<<" ";
    }*/
    merge_sort1(0,n);
    merge_sort2(0,n);
    /*for(long long i=1;i<=n;i++){
        if(xl[i]>=l){
            ans1++;
        }
        if(xl[i]>r){
            ans2++;
        }
    }*/
    long long acount=(n+1)*n/2;
    //cout<<ans1<<" "<<ans2<<endl;
    long long ans=ans1-ans2;
    if(ans%acount==0){
        cout<<ans/acount<<endl;
    }
    else{
        long long m=gcd(ans,acount);
        cout<<ans/m<<"/"<<acount/m<<endl;
    }
    return 0;
}
通达信行情API是金融数据提供商通达信(TongDaXin)为开发者金融机构提供的接口服务,用于获取实时及历史的股票、期货、期权等金融市场数据。这个API允许用户在自己的应用程序中集成通达信的数据服务,实现个性化数据分析、交易策略开发等功能。 1. **API基本概念** - **API**:Application Programming Interface,应用程序编程接口,是软件之间交互的一种方式,提供预定义的函数方法,使得其他软件能够调用特定功能。 - **通达信**:国内知名的金融终端软件提供商,提供股票、期货、基金等市场数据,以及交易服务。 2. **通达信API的功能** - **实时行情**:获取股票、期货、期权等市场的实时报价信息,包括最新价、涨跌额、涨跌幅、成交量等。 - **历史数据**:获取历史交易日的K线数据、分时数据、交易量等信息,支持自定义时间段查询。 - **深度数据**:获取买卖盘口的五档报价成交量,有助于分析市场买卖意愿。 - **资讯信息**:获取公告、研报、新闻等市场资讯。 - **交易委托**:通过API进行交易下单、撤单等操作,实现自动化交易。 3. **TdxHqApi** - **TdxHqApi** 是通达信行情API的具体实现,它包含了调用通达信数据服务的各种函数类,如获取股票列表、获取实时行情、获取历史数据等。 - 开发者需要按照API文档的指示,导入TdxHqApi库,然后通过调用相应的函数来获取所需数据。 4. **使用步骤** - **安装**:下载安装通达信API的SDK,通常包括头文件动态链接库。 - **初始化**:在代码中实例化API对象,进行连接设置,如服务器地址、端口号等。 - **连接**:连接到通达信服务器,进行身份验证。 - **数据请求**:调用对应的API函数,例如`GetS
内容概要:本文档是一份关于大数据开发的笔试题目集合,涵盖了多个计算机科学领域的知识点。主要内容包括:数组排序算法的应用,如给出了一段不完整的冒泡排序代码示例;二叉树的基本操作,包括普通二叉树的遍历方式(先序遍历),以及针对大规模数据(如一亿个节点)时避免服务器崩溃的优化策略——采用分布式计算思想将单棵大树拆分为多棵小树行处理;人力资源系统的数据库设计方案,涉及到了员工信息存储所需的字段(如ID、姓名、工资、上级ID、层级)、展示公司内部架构的SQL语句(利用CTE公共表达式或者PL/SQL中的特定语法来构建递归查询),还有统计某个管理者所辖人数的方法论。 适合人群:正在准备大数据相关岗位面试的技术人员,尤其是那些希望加深对数据结构、算法以及数据库设计等方面理解的人群。 使用场景及目标:①帮助求职者熟悉常见的编程技巧与理论知识,提高解决实际问题的能力;②为从事企业级应用开发工作的程序员提供参考案例,以便更好地理解实施复杂的数据管理业务逻辑建模任务。 阅读建议:由于文档中包含了多种类型的题目,建议读者按照自己的薄弱环节选择重点复习的内容。对于排序算法部分,应该注意理解各种经典算法的工作机制及其优缺点;对于二叉树的问题,则要掌握不同遍历顺序的特点,思考如何应对海量数据带来的挑战;最后,在研究HR系统相关的数据库设计时,除了要学会正确地创建表格外,还应学会运用适当的SQL语句来进行高效的数据检索分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值