zoukankan      html  css  js  c++  java
  • hdu 5101 Select (二分+单调)

    题意:

    多多有一个智商值K。

    有n个班级,第i个班级有mi个人。智商分别是v1,v2,.....vm。

    多多要从这些人中选出两人。要求两人智商和大于K,并且两人不同班。问总共有多少种方案。

    数据范围:

    n ( 0n1000 ), k( 0k<2^31 )

    m( 0m100 ), v[i]( 0v[i]<2^31 )

     思路:

    对于一个单调长的序列,可以很容易地统计两数之和大于K的对数(枚举第一个数,二分找到满足条件的最小的数的位置,然后它和它后面的数都是满足条件的)

    故对于每个班内,从小到大排序,统计。

    然后对于所有人,从小到大排序,统计。

    后者统计值减去前者统计值即为答案。

    代码:

    int T,n,k,m;
    int q1[105];
    int q[100005];
    
    int main(){
        cin>>T;
        while(T--){
            scanf("%d%d",&n,&k);
            ll ans=0,ans1=0;
            ll c=0;
            rep(i,1,n){
                scanf("%d",&m);
                rep(i,1,m){
                    scanf("%d",&q1[i]);
                    q[++c]=q1[i];
                }
                sort(q1+1,q1+1+m);
                rep(i,1,m-1){
                    int pos=upper_bound(q1+1+i,q1+1+m,k-q1[i])-q1;
                    ans1+=(ll)(m-pos+1);
                }
            }
            sort(q+1,q+1+c);
            rep(i,1,c-1){
                int pos=upper_bound(q+1+i,q+1+c,k-q[i])-q;
                ans+=(ll)(c-pos+1);
            }
            printf("%I64d
    ",ans-ans1);
        }
    }
  • 相关阅读:
    k8s之StatefulSet介绍(六)
    k8s之Deployment 声明式地升级应用(五)
    k8s 挂载卷介绍(四)
    k8s 之service资源介绍(三)
    k8s几种pod的控制器
    k8s 初识pod (二)
    k8s的常用命令(一)
    k8s 学习笔记
    aws centos系统磁盘扩容
    mac更改launchpad图标大小
  • 原文地址:https://www.cnblogs.com/fish7/p/4084203.html
Copyright © 2011-2022 走看看