国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第十三屆藍(lán)橋杯 Java B 組省賽 D 題—— 最少刷題數(shù)(AC)

這篇具有很好參考價(jià)值的文章主要介紹了第十三屆藍(lán)橋杯 Java B 組省賽 D 題—— 最少刷題數(shù)(AC)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.最少刷題數(shù)

1.題目描述

小藍(lán)老師教的編程課有 N N N 名學(xué)生, 編號(hào)依次是 1 … N 1…N 1N 。第 i i i 號(hào)學(xué)生這學(xué)期 刷題的數(shù)量是 A i A_{i} Ai?
對(duì)于每一名學(xué)生, 請(qǐng)你計(jì)算他至少還要再刷多少道題, 才能使得全班刷題 比他多的學(xué)生數(shù)不超過(guò)刷題比他少的學(xué)生數(shù)。

2.輸入格式

第一行包含一個(gè)正整數(shù) N N N

第二行包含 N N N 個(gè)整數(shù): A 1 , A 2 , A 3 , … , A N A_{1}, A_{2}, A_{3}, \ldots, A_{N} A1?,A2?,A3?,,AN?。

3.輸出格式

輸出 N N N 個(gè)整數(shù), 依次表示第 1 … N 1 \ldots N 1N 號(hào)學(xué)生分別至少還要再刷多少道題。

4.樣例輸入

5
12 10 15 20 6

5.樣例輸出

0 3 0 0 7

6.數(shù)據(jù)范圍

1 ≤ N ≤ 100000 , 0 ≤ A i ≤ 100000 1≤N≤100000,0≤Ai≤100000 1N100000,0Ai100000

7.原圖鏈接

最少刷題數(shù)

2.解題思路

這道題應(yīng)該是可以使用中位數(shù)的辦法來(lái)解決的,但感覺(jué)不太好寫(xiě),并不推薦寫(xiě)。所以考慮一個(gè)更加好寫(xiě)的辦法——二分。
對(duì)于一個(gè)刷題數(shù)量為 a [ i ] a[i] a[i] 的同學(xué),它增加后的刷題量應(yīng)該在區(qū)間 [ a [ i ] , 100000 ] [a[i],100000] [a[i],100000],為了使得比他刷題多的學(xué)生不超過(guò)比他刷題少的學(xué)生,我們當(dāng)然希望他刷的題越多越好,如果當(dāng)他刷了 x x x 道題是符合要求的,那么大于 x x x 的答案也一定符合,但是小于 x x x 的答案卻不一定符合,這就滿(mǎn)足我們的二段性質(zhì),說(shuō)明我們對(duì)于每一位同學(xué)都可以去二分答案。

當(dāng)然二分答案我們還有一個(gè)需求,需要快速查詢(xún)?cè)谝欢畏謹(jǐn)?shù)區(qū)間有多少位同學(xué),我們可以使用數(shù)組cnt[i]統(tǒng)計(jì)分?jǐn)?shù)為i的同學(xué)有多少位,然后將其變?yōu)榍熬Y和數(shù)組即可。

二分判斷時(shí)如果當(dāng)前同學(xué)不需要額外刷題即符合要求,我們輸出0即可。在二分判斷時(shí),當(dāng)它的刷題數(shù)變?yōu)? x x x 時(shí),比他刷題多的同學(xué)數(shù)量就應(yīng)該是cnt[100000]-cnt[x],比他刷題少的同學(xué)數(shù)量為cnt[x-1]-1。特別注意當(dāng) a[i]等于0時(shí)比它少的同學(xué)數(shù)量一定為0需要進(jìn)行特判(感謝評(píng)論區(qū)小伙伴的hack)。

為什么還需要減去1呢?因?yàn)檫@位同學(xué)原先的刷題數(shù)是小于x的, 此時(shí)他已經(jīng)變?yōu)?code>x了,所以統(tǒng)計(jì)比他少刷題數(shù)的同學(xué)時(shí)需要把他去掉。這樣二分得到的答案是他的目標(biāo)刷題量,減去他本身的刷題量即是答案。

時(shí)間復(fù)雜度: O ( n l o g n ) O(nlogn) O(nlogn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-408794.html

Ac_code

C++

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> PII;
#define pb(s) push_back(s);
#define SZ(s) ((int)s.size());
#define ms(s,x) memset(s, x, sizeof(s))
#define all(s) s.begin(),s.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int N = 200010;

int n;
int a[N];
int cnt[N];
void solve()
{
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        cnt[a[i]]++;
    }
    for (int i = 1; i <= 100000; ++i) {
        cnt[i] += cnt[i - 1];
    }
    for (int i = 0; i < n; ++i) {
        if (cnt[100000] - cnt[a[i]] <= (a[i] == 0 ? 0 : cnt[a[i] - 1])) {
            cout << 0 << " ";
            continue;
        }
        int l = a[i] + 1, r = 100000;
        while (l < r) {
            int mid = l + r >> 1;
            if (cnt[100000] - cnt[mid] <= cnt[mid - 1] - 1) r = mid;
            else l = mid + 1;
        }
        cout << r - a[i] << " ";
    }
}
int main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    while (t--)
    {
        solve();
    }
    return 0;
}

Java

import java.io.*;

public class Main{
    static int N = 200010;
    static int[] a = new int[N], cnt = new int[N];
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        int n=Integer.parseInt(br.readLine());
        String[] s = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            a[i] = Integer.parseInt(s[i]);
            cnt[a[i]]++;
        }
        for (int i = 1; i <= 100000; ++i) {
            cnt[i] += cnt[i - 1];
        }
        for (int i = 0; i < n; ++i) {
            if (cnt[100000] - cnt[a[i]] <=(a[i] == 0 ? 0 : cnt[a[i] - 1])) {
                out.print(0 + " ");
                continue;
            }
            int l = a[i] + 1, r = 100000;
            while (l < r) {
                int mid = l + r >> 1;
                if (cnt[100000] - cnt[mid] <= cnt[mid - 1] - 1) r = mid;
                else l = mid + 1;
            }
            out.print((r - a[i]) + " ");
        }
        out.flush();
    }
}

到了這里,關(guān)于第十三屆藍(lán)橋杯 Java B 組省賽 D 題—— 最少刷題數(shù)(AC)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 藍(lán)橋杯單片機(jī)學(xué)習(xí)14——第十三屆省賽題

    藍(lán)橋杯單片機(jī)學(xué)習(xí)14——第十三屆省賽題

    上期我們學(xué)習(xí)了NE555方波發(fā)生器頻率測(cè)量,講到我會(huì)更新之后省賽的題目,那么,他來(lái)了。 首先聲明:我還沒(méi)有參加藍(lán)橋杯單片機(jī)比賽,也沒(méi)有拿過(guò)獎(jiǎng),所以我寫(xiě)的代碼注定不會(huì)那么完美,存在BUG是必然的,我寫(xiě)這個(gè)系列的目的純粹是為了記錄我的學(xué)習(xí)………… 關(guān)于功能描述

    2024年02月06日
    瀏覽(90)
  • 第十三屆藍(lán)橋杯省賽 python B組復(fù)盤(pán)

    第十三屆藍(lán)橋杯省賽 python B組復(fù)盤(pán)

    ?????? 備戰(zhàn)藍(lán)橋杯第一彈–復(fù)盤(pán) 思路 (當(dāng)時(shí)第一次參加藍(lán)橋杯,當(dāng)時(shí)現(xiàn)場(chǎng)心里小鹿亂撞,用排序輸出了還每個(gè)字母數(shù)數(shù)驗(yàn)證一番(滑稽)) 字符串轉(zhuǎn)列表 列表排序 列表轉(zhuǎn)字符串 代碼 思路 當(dāng)時(shí)在現(xiàn)場(chǎng)程序沒(méi)跑出來(lái) 想著那個(gè)數(shù)取余2余1,取余4余1,取余8余1可以只看取余8余1的,

    2023年04月20日
    瀏覽(26)
  • 第十三屆省賽藍(lán)橋杯物聯(lián)網(wǎng)程序設(shè)計(jì)試題

    第十三屆省賽藍(lán)橋杯物聯(lián)網(wǎng)程序設(shè)計(jì)試題

    1、配置根據(jù)試題的要求配置STM32CubeMX (1)引腳配置 將PC14引腳配置為輸入模式 PC14 用戶(hù)按鍵引腳 將PA10引腳配置為中斷模式 PA10 LoRa模塊DIO0引腳 將以下引腳配置為輸出模式 PC15 用戶(hù)LED引腳 PB5 OLED 電源控制引腳 PA11和PA12 繼電器控制引腳 PA4和PA9 LoRa模塊片選和復(fù)位引腳,初始為高電

    2023年04月10日
    瀏覽(97)
  • 【藍(lán)橋杯Web】第十三屆藍(lán)橋杯(Web 應(yīng)用開(kāi)發(fā))省賽真題

    【藍(lán)橋杯Web】第十三屆藍(lán)橋杯(Web 應(yīng)用開(kāi)發(fā))省賽真題

    第十三屆藍(lán)橋杯全國(guó)軟件和信息技術(shù)專(zhuān)業(yè)人才大賽(軟件類(lèi))新開(kāi)了Web應(yīng)用開(kāi)發(fā)比賽,本文介紹第十三屆藍(lán)橋杯Web應(yīng)用開(kāi)發(fā)的省賽題目以及解析。 題目描述:使用Flex屬性快速完成布局。 題目分析:主要涉及的是Flex彈性布局的知識(shí),主要包括主軸方向和是否換行。 題目代碼:

    2023年04月10日
    瀏覽(27)
  • 第十三屆藍(lán)橋杯大賽軟件賽省賽(C++研究生組)

    可以證明,只要首先裁剪最外圍的 4 4 4 條邊,之后無(wú)論怎樣裁剪,次數(shù)都是最少。對(duì)于 n n n 行 m m m 列的二維碼,至少需要裁剪 n m + 3 nm + 3 nm + 3 次,因此答案為 20 × 22 + 3 = 443 20times 22+3=443 20 × 22 + 3 = 443 。 證明:只需證明裁掉邊界后至少還需裁剪 n m ? 1 nm-1 nm ? 1 次。 n

    2023年04月10日
    瀏覽(25)
  • 【藍(lán)橋杯嵌入式】第十三屆藍(lán)橋杯嵌入式省賽客觀題以及詳細(xì)題解

    【藍(lán)橋杯嵌入式】第十三屆藍(lán)橋杯嵌入式省賽客觀題以及詳細(xì)題解

    題解: ??概念題。 MCO引腳,是單片機(jī)對(duì)外提供時(shí)鐘的引腳。 HSE,高速外部時(shí)鐘信號(hào),時(shí)鐘源由外部晶體/陶瓷諧振器與外部時(shí)鐘; HSI,高速的內(nèi)部時(shí)鐘,由內(nèi)部8MHz的RC振蕩器產(chǎn)生,可直接作為系統(tǒng)時(shí)鐘或在2分頻后作為PLL輸入; SYSCLK,是系統(tǒng)時(shí)鐘; HSE/2,對(duì)高速外部時(shí)鐘進(jìn)

    2023年04月16日
    瀏覽(787)
  • 試題G:全排列的價(jià)值(第十三屆藍(lán)橋杯省賽Python B組)

    試題G:全排列的價(jià)值(第十三屆藍(lán)橋杯省賽Python B組)

    ? 首先,我們先重新排列一下題目所給的例子 我們將每種排列的每個(gè)元素價(jià)值單獨(dú)拿出來(lái)看看(矩陣1) 不難發(fā)現(xiàn)

    2023年04月15日
    瀏覽(29)
  • 看看去年藍(lán)橋考了什么,第十三屆藍(lán)橋杯省賽(C/C++ 大學(xué)B組)題解

    看看去年藍(lán)橋考了什么,第十三屆藍(lán)橋杯省賽(C/C++ 大學(xué)B組)題解

    本題為填空題,只需要算出結(jié)果后,在代碼中使用輸出語(yǔ)句將所填結(jié)果輸出即可。 九進(jìn)制正整數(shù) (2022)9 轉(zhuǎn)換成十進(jìn)制等于多少? 最大運(yùn)行時(shí)間:1s 最大運(yùn)行內(nèi)存: 512M 這是一道經(jīng)典的進(jìn)制轉(zhuǎn)換題目,具體可以點(diǎn)進(jìn)鏈接看看這篇文章。進(jìn)制轉(zhuǎn)換點(diǎn)擊這里?。。?本題為填空題,只

    2024年02月02日
    瀏覽(54)
  • 2022 第十三屆藍(lán)橋杯大賽軟件賽省賽(第二場(chǎng)),C/C++ 大學(xué)B組題解

    2022 第十三屆藍(lán)橋杯大賽軟件賽省賽(第二場(chǎng)),C/C++ 大學(xué)B組題解

    2022 第十三屆藍(lán)橋杯大賽軟件賽省賽(第二場(chǎng)),C/C++ 大學(xué)B組題解 補(bǔ)題鏈接:地址 第1題 —— 練習(xí) (5分) 題意:過(guò)了樣例交上去0分,問(wèn)可能是ABC的哪一種 顯然都是,答案:ABC 第2題 —— 三角回文數(shù) (5分) 題意:求第一個(gè)大于某2e8的數(shù)的回文數(shù),且滿(mǎn)足他可以等于1+2+…

    2023年04月09日
    瀏覽(25)
  • 第十三屆藍(lán)橋杯省賽與國(guó)賽真題題解大匯總(十四屆參賽者必備)

    ??大家好,我是執(zhí)梗。本文匯總了我寫(xiě)的第十三屆藍(lán)橋杯所有省賽真題與國(guó)賽真題,會(huì)針對(duì)每道題打出我自己的難度評(píng)星??,也會(huì)給出每道題的算法標(biāo)簽,幫助大家更有針對(duì)性的去學(xué)習(xí)和準(zhǔn)備,當(dāng)然許多題目由于難度或時(shí)間的原因暫未更新,如果有不懂的問(wèn)題也可以在評(píng)

    2024年02月11日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包