首页 > 其他分享 >[CodeForces]4.7

[CodeForces]4.7

时间:2023-04-07 12:32:10浏览次数:61  
标签:4.7 idx bisect res 个数 CodeForces input arr

题目链接:https://codeforces.com/contest/1610/problem/E

灵神描述

输入 t(≤1e4) 表示 t 组数据。所有数据的 n 之和 ≤2e5。

每组数据输入 n(2≤n≤2e5) 和长为 n 的有序数组 a(1≤a[i]≤1e9),有重复元素。


你需要从 a 中删除一些元素,对于 a 的任意非空子序列 b,都必须满足:

设 avg 为 b 的平均值(可以是小数),b 中比 avg 小的数的个数必须 >= b 中比 avg 大的数的个数。


例如 [1,4,4,5,6] 的平均值为 4,有 1 个数比 4 小,有 2 个数比 4 大,这是不满足要求的。

而 [4,4,5,6] 是满足要求的。


最少需要删除多少个数?


注:子序列不要求连续。


输入

4

3

1 2 3

5

1 4 4 5 6

6

7 8 197860736 212611869 360417095 837913434

8

6 10 56026534 405137099 550504063 784959015 802926648 967281024

输出

0

1

2

3

Solution

[CodeForces]4.7_CF

from bisect import bisect_left
t = int(input())
for _ in range(t):
    n = int(input())
    arr = list(map(int, input().split()))
    res = 0
    # 初始元素
    for i in range(n):
        l = 0
        diff = 0
        idx = i
        if i > 0 and arr[i] == arr[i - 1]:
            continue
        while idx < n and arr[idx] == arr[i]:
            l += 1
            idx += 1
        while idx < n:
            idx = bisect_left(arr, arr[idx] + diff)
            if idx < n:
                l += 1
                diff = arr[idx] - arr[i]
        res = max(res, l)
    print(n - res)

1.python的数组拷贝操作很费时间。不要这么做。

2.使用PyPy进行提交会更快。

标签:4.7,idx,bisect,res,个数,CodeForces,input,arr
From: https://blog.51cto.com/u_15763108/6176006

相关文章

  • CodeForces - 149D Coloring Brackets(区间DP)
    题目大意:给你一个符合括号规则的字符串,现在要求你将这些括号染色,染色规则如下1.一个括号要么被染成红色,要么被染成蓝色,要么不染2.相邻的括号的颜色不能相同(可以同为无色)3.成对的括号只能有一个被染色问染色的方案数解题思路:0表示不染,1表示红色,2表示蓝色那么成对的括号......
  • codeforces 1793D Moscow Gorillas
    https://codeforces.com/contest/1793/problem/D解题思路依次找出MEX=1..n+1的序列数量就能得解。MEX=n+1只有全序列这一种情况。MEX=1时,找出两个序列中1的位置,较小位置左边的元素构成的子序列,较大位置右边的元素构成的子序列,以及两个位置中间的元素构成的子序列都满......
  • Codeforces Round 642 (Div3)
    K-periodicGarland给定一个长度位\(n\)的\(01\)串,每次操作可以将\(1\)变为\(0\)或者将\(0\)变为\(1\),现在你需要通过操作使得所有\(1\)之间的距离为\(k\),求最少的操作次数,注意全为\(0\)也算\(1<=n<=1e6,1<=k<=n\)\(dp\)/贪心:最大子段和思想方法一:\(dp\)\(O(n)\)状......
  • codeforces 1795E Explosions?
    https://codeforces.com/problemset/problem/1795/E解题思路问题的核心是要构造有一个先严格递增,然后严格递减的子序列。不在这个序列中的怪物单独击杀。先递增后递减可以看作是两个对称的问题,所以把递增序列的构造考虑清楚就可以了。假设已经知道将1~i-1构造成严格递增子序列所......
  • Codeforces Round 862 (Div. 2)
    CodeforcesRound862(Div.2)链接CodeforcesRound862(Div.2)A题#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<vector>#include<cstring>#include<unordered_set>#includ......
  • Codeforces Round 863 (Div. 3)
    CodeforcesRound863(Div.3)链接CodeforcesRound863(Div.3)A题遍历这个字符串,如果要插入的数第一次小于当前的数,就将数插入到这里,如果到最后都没有插入数,插入到最后#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<vec......
  • Codeforces Round 863 (Div. 3) E题
    题目地址题意:定义数组a包含所有不含数字4的正整数,给出一个n,要求求出数组a中第n个数Solution数位dp+二分,求出[1,mid]中不含数字4的正整数个数,不过因为有可能mid包含4,但是由于贡献是一样的,可以直接把4都变成3,最后处理一下即可intdp[20];inta[20];voidinit(){ dp[0]=1; f......
  • win10+OpenCV4.7.0+cuda环境配置
    需要先安装和下载好以下文件vs2022CMake3.24.2opencv-4.7.0 GitHub-opencv/opencv:OpenSourceComputerVisionLibrary有时github上不去多刷新几次,久等一会儿,因为后续需要手动下载一些cmake不能下载的文件。opencv_contrib-4.7.0 GitHub-opencv/opencv_contrib:Rep......
  • Codeforces Round 863 (Div. 3)
    A.InsertDigit放在第一个比他小的数前面#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn,d;cin>>n>>d;strings;cin>>s;for(chari:s){if(d>i-'0')cout<<d,d......
  • Codeforces Round 640 (Div. 4) ABCDEFG
    https://codeforces.com/contest/1352不知道怎么的复制过来的代码容易歪,观看效果可能不大好。这场古早div4,大题极其友好,除了E卡空间卡到我爆炸,别的都体验感极好。A.SumofRoundNumbers#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpai......