首页 > 其他分享 >C. Permutation Counting

C. Permutation Counting

时间:2024-05-14 19:20:07浏览次数:17  
标签:ll ans mid cin while 数组 Permutation Counting

原题链接

题解

给定一个数组,你知道怎么计算最终答案吗?
设数组大小为 \(n\),数组中的最小值为 \(x\),大于最小值的个数为 \(p\)
则 \(ans=n*x-(n-1)+p\),\(p\in[0,n-1]\)

所以 \(x\) 越大,\(ans\) 越大
二分的前置条件有了
二分 \(x\) 遍历数组判断 \(k\) 能否达到这个 \(x\)

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[200005]={0};
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    ll t;
    cin>>t;
    while(t--)
    {
        ll n,k;
        cin>>n>>k;
        for(ll i=1;i<=n;i++) cin>>a[i];

        ll l=1,r=2e12+1;
        while(l+1<r)
        {
            ll mid=(l+r)/2;
            ll tem=k;
            for(ll i=1;i<=n;i++) if(a[i]<mid) tem-=mid-a[i];
            if(tem>=0) l=mid;
            else r=mid;
        }
        ll cnt0=0,cnt1=0,tem=k;
        for(ll i=1;i<=n;i++)
        {
            if(a[i]<=l)//这里是小于等于,因为刚补齐
            {
                tem-=l-a[i];
                cnt0++;
            }
            else cnt1++;
        }
        //cout<<l<<":\n";
        cout<<l*n-(n-1)+cnt1+min(cnt0,tem)<<"\n";
    }
    return 0;
}

标签:ll,ans,mid,cin,while,数组,Permutation,Counting
From: https://www.cnblogs.com/pure4knowledge/p/18192052

相关文章

  • next_permutation 用法
    next_permutation()全排列函数·.next_permutation(start,end)返回下一个排列·.prev_permutation(start,end)返回上一个排列(均按字典序排序)当当前序列(数组)不存在下一个排列时,函数返回false,否则返回truenext_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时......
  • 探讨:ARC(Automatic Reference Counting)与手动内存管理的区别及工作原理
    在iOS和macOS开发中,内存管理是一个至关重要的话题。在过去,手动内存管理是一项繁琐且容易出错的任务,而引入了ARC(AutomaticReferenceCounting,自动引用计数)之后,内存管理变得更加简单和安全。本文将详细讨论ARC和手动内存管理之间的区别,并解释ARC的工作原理。1.ARC与手......
  • AGC005D ~K Perm Counting
    Statement:若一个有\(n\)个元素的排列\(P\)满足对于任意\(i(1\len\len)\)都有\(|P_i-i|\nek\),则这个排列是合法的。现给定\(n,k\),问有多少个合法的排列。Solution:神仙题啊。考虑容斥。钦定有\(i\)个位置不满足条件,即满足\(|P_i-i|=k\)。这里有一步......
  • qoj1138 Counting Mushrooms
    交互题。有一个隐藏的01序列\(a\),你只知道\(a\)的长度,并记为\(n\)。保证\(a_1=0\)。你可以执行以下操作:询问一个序列\(b\),满足两两不同且长度在\([2,1000]\)之间。交互库会返回\(\sum[a(b_i)\not=a(b_{i+1})]\)。请在\(226\)次操作内求出\(a\)中\(0\)......
  • C. Game on Permutation
    链接:https://codeforces.com/problemset/problem/1860/C洛谷链接:https://www.luogu.com.cn/problem/CF1860C相关知识点复习:LIS最长上升子序列链接:https://blog.csdn.net/lxt_Lucia/article/details/81206439关键:这题的思路在于找到LIS长度为2的点,比如13254那么显然3,2是......
  • Codeforces 452F Permutation
    对于\(a,b,\frac{a+b}{2}\)肯定是需要固定下一些变量来考虑的。考虑固定下\(c=\frac{a+b}{2}\),考虑\(a,b\)。那么这样的\(a,b\)肯定满足\(a-c=b-c,a\not=b\),那么以\(c\)为中心,\(a,b\)就是对称的。用\(s_i=0,1\)来表示\(i\)是在\(c\)的......
  • permutations and combinations in js All In One
    permutationsandcombinationsinjsAllInOnejs中的排列组合概念排列组合demos/*permutations&combinations排列&组合https://leetcode.com/problems/3sum/给定一个数字数组,找出有三个元素为一组构成的所有不重复的子数字数组!*///constarr=[1,2,......
  • 库函数next_permutation()
    洛谷上有一道题叫做全排列问题,是一道搜索题,正常情况大家会用深搜dfs的方法解这道题,代码如下:#include<bits/stdc++.h>intn,a[10],pp=1;boolb[10];usingnamespacestd;intprint(){for(inti=1;i<=n;i++){ printf("%5d",a[i]); }printf("\n");}intsea......
  • E. Klever Permutation
    链接:https://codeforces.com/problemset/problem/1927/E思路:观察,可知每隔k个数据就是+1/-1,且间隔而分,思路如下:然后按顺序打表就行代码:#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<sstream>#include<string>#includ......
  • Codeforces 954H Path Counting
    令输入的为\(a'\),同时\(a'_0=1\)。对其做一个前缀积\(a_i=\prod\limits_{i=0}^ia'_i\),对于\(i\gen\),认为\(a_i=0\)。那么\(a_i\)就相当于是深度\(i+1\)的点的个数。同时也可以得到根的深度为\(l\)时子树内深度为\(r\)的深度的点数为\(\dfrac{a_{r-......