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

《算法競賽·快沖300題》每日一題:“松鼠與栗子”

這篇具有很好參考價值的文章主要介紹了《算法競賽·快沖300題》每日一題:“松鼠與栗子”。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

算法競賽·快沖300題》將于2024年出版,是《算法競賽》的輔助練習冊。
所有題目放在自建的OJ New Online Judge。
用C/C++、Java、Python三種語言給出代碼,以中低檔題為主,適合入門、進階。


松鼠與栗子” ,鏈接: http://oj.ecustacm.cn/problem.php?id=1852

題目描述

【題目描述】 現(xiàn)在有m棵栗子樹,n只松鼠在等待栗子下落。
?? 第i棵樹的第一個栗子在t[i],之后每p[i]秒都掉落一個。
?? 現(xiàn)在松鼠們希望最終能獲得k個栗子,每只松鼠將選擇一棵栗子樹等待。
?? 不考慮松鼠移動到每棵樹的時間,只考慮等待時間。
?? 請求出最優(yōu)情況下的最少的等待時間,即松鼠選擇最優(yōu)情況下的n個栗子樹進行等待,等待時間最小是多少。
【輸入格式】 第一行為正整數(shù)m,n,k。1≤n≤m≤10000,1≤k≤10^7。
?? 第二行包含m個整數(shù)表示t[i]。
?? 第三行包含m個整數(shù)表示p[i],1≤t[i],p[i]≤100。
【輸出格式】 輸出一個數(shù)字表示答案。
【輸入樣例】

樣例13 2 5
5 1 2
1 2 1

樣例23 2 5
5 1 2
1 1 1

【輸出樣例】

樣例14

樣例23

題解

?? 這是一道很直接的二分題。等待時間越長,掉落栗子越多,所以等待時間對應的栗子數(shù)量是單調(diào)遞增的,可以用二分法。猜一個最小等待時間x,用二分法找到x。
?? 用check(x)函數(shù)判斷x時間是否掉落超過k個栗子。首先算出m顆樹在x秒時一共掉落多少個栗子, 若栗子總數(shù)少于k, 返回false;如果超過k個,對m棵樹掉落的栗子排序后,選擇前n個與k比較。
【重點】 二分 。文章來源地址http://www.zghlxwxcb.cn/news/detail-679941.html

C++代碼

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int t[N], p[N];
int num[N];
int n, m, k;
bool check(int x){
    for(int i = 1; i <= m; i++)  {
        if(x >= t[i])  num[i] = (x - t[i]) / p[i] + 1;
        else           num[i] = 0;
    }
    long long sum = 0;
    sort(num + 1, num + 1 + m, greater<int>());  //從大到小排序
    for(int i=1; i<=n && i<=m; i++)  sum += num[i];
    return sum >= k;
}
int main(){
    cin >> m >> n >> k;
    if(n > m)  n = m;
    for(int i=1; i<=m; i++)  cin >> t[i];
    for(int i=1; i<=m; i++)  cin >> p[i];
    int L=0, R=1e9, ans=0;
    while(L <= R){
        int mid = (L + R) >> 1;
        if(check(mid))   ans = mid, R = mid - 1;
        else             L = mid + 1;
    }
    cout<<ans<<endl;
    return 0;
}

Java代碼

import java.util.*;
public class Main {
    static int[] t = new int[10010];
    static int[] p = new int[10010];
    static int[] num = new int[10010];
    static int n, m, k;
    public static boolean check(int x) {
        for (int i = 1; i <= m; i++) {
            if (x >= t[i]) num[i] = (x - t[i]) / p[i] + 1;
            else num[i] = 0;
        }
        long sum = 0;
        Arrays.sort(num, 1, m + 1);
        for (int i=1; i<=n && i<=m; i++) sum += num[m - i + 1];
        return sum >= k;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        m = sc.nextInt();
        n = sc.nextInt();
        k = sc.nextInt();
        if (n > m) n = m;
        for (int i = 1; i <= m; i++) t[i] = sc.nextInt();
        for (int i = 1; i <= m; i++) p[i] = sc.nextInt();
        int L = 0, R = 1000000000, ans = 0;
        while (L <= R) {
            int mid = (L + R) >> 1;
            if (check(mid)) { ans = mid;  R = mid - 1; } 
            else  L = mid + 1;            
        }
        System.out.println(ans);
        sc.close();
    }
}

Python代碼

t = [0] * (10010)
p = [0] * (10010)
num = [0] * (10010)
def check(x):
    for i in range(1, m + 1):
        if x >= t[i]:  num[i] = (x - t[i]) // p[i] + 1
        else:          num[i] = 0
    num.sort(reverse=True)
    sum = 0
    for i in range(1, n+1 if n<=m else m+1):   sum += num[i]
    return sum >= k
m, n, k = map(int, input().split())
t[1:] = [int(x) for x in input().split()]
p[1:] = [int(x) for x in input().split()]
L, R, ans = 0, 1000000000, 0
while L <= R:
    mid = (L + R) // 2
    if check(mid):
            ans = mid
            R = mid - 1
    else:   L = mid + 1
print(ans)

到了這里,關于《算法競賽·快沖300題》每日一題:“松鼠與栗子”的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 《算法競賽·快沖300題》每日一題:“湊二十四”

    《 算法競賽·快沖300題 》將于2024年出版,是《算法競賽》的輔助練習冊。 所有題目放在自建的OJ New Online Judge。 用C/C++、Java、Python三種語言給出代碼,以中低檔題為主,適合入門、進階。 “ 湊二十四 ” ,鏈接: http://oj.ecustacm.cn/problem.php?id=1793 【題目描述】 給你n個數(shù)字,

    2024年02月11日
    瀏覽(18)
  • 羅勇軍 → 《算法競賽·快沖300題》每日一題:“排列變換” ← 貪心算法

    【題目來源】 http://oj.ecustacm.cn/problem.php?id=1812 http://oj.ecustacm.cn/viewnews.php?id=1023 【題目描述】 給定一個長度為 n 的排列 a,需要將這個排列變成 b。 每次可以選擇一個數(shù)字往左移若干個位置。 請求出 最小需要移動的元素個數(shù) 。 【輸入格式】 第一行為正整數(shù) n,1≤n≤100000。

    2024年02月12日
    瀏覽(24)
  • 羅勇軍 →《算法競賽·快沖300題》每日一題:“乘積” ← 動態(tài)規(guī)劃

    【題目來源】 http://oj.ecustacm.cn/problem.php?id=1781 http://oj.ecustacm.cn/viewnews.php?id=1023 【題目描述】 給你一個長度為 n 的序列,序列中的元素只包括 1 和 -1。 請問有多少個連續(xù)的子序列乘積為正數(shù)。 【輸入格式】 輸入第一行為正整數(shù) n。(n不超過10^6) 第二行包含 n 個整數(shù)。 【輸

    2024年02月11日
    瀏覽(19)
  • 羅勇軍 →《算法競賽·快沖300題》每日一題:“游泳” ← DFS+剪枝

    【題目來源】 http://oj.ecustacm.cn/problem.php?id=1753 http://oj.ecustacm.cn/viewnews.php?id=1023 【題目描述】 游泳池可以等分為n行n列的小區(qū)域,每個區(qū)域的溫度不同。 小明現(xiàn)在在要從游泳池的左上角(1, 1)游到右下角(n, n),小明只能向上下左右四個方向游,不能游出泳池。 而小明對溫度十分

    2024年02月10日
    瀏覽(19)
  • 羅勇軍 →《算法競賽·快沖300題》每日一題:“小球配對” ← 并查集

    羅勇軍 →《算法競賽·快沖300題》每日一題:“小球配對” ← 并查集

    【題目來源】 http://oj.ecustacm.cn/problem.php?id=1850 http://oj.ecustacm.cn/viewnews.php?id=1023 【題目描述】 給定 n 個小球,編號為 1-n ,給定 m 個籃子,編號為 1-m 。 每個球只允許放入樣例給定的編號為 Ai 或者 Bi 的兩個籃子中的 1 個。 每個球必須放入某個籃子。 如果籃子中球的數(shù)量為奇

    2024年02月11日
    瀏覽(24)
  • 算法|每日一題|H 指數(shù)|二分

    原題地址: 力扣每日一題:H 指數(shù) 給你一個整數(shù)數(shù)組 citations ,其中 citations[i] 表示研究者的第 i 篇論文被引用的次數(shù)。計算并返回該研究者的 h 指數(shù)。 根據(jù)維基百科上 h 指數(shù)的定義:h 代表“高引用次數(shù)” ,一名科研人員的 h 指數(shù) 是指他(她)至少發(fā)表了 h 篇論文,并且每

    2024年02月08日
    瀏覽(20)
  • 每日一題之常見的排序算法

    排序是最常用的算法,常見的排序算法有冒泡排序、選擇排序、插入排序、快速排序、希爾排序和歸并排序。除此之外,還有桶排序、堆排序、基數(shù)排序和計數(shù)排序。 1、冒泡排序 冒泡排序就是把小的元素往前放或大的元素往后放,比較的是相鄰的兩個元素。 時間復雜度:

    2024年02月13日
    瀏覽(20)
  • 算法每日一題:贖金信 | 字符和整數(shù)

    hello,大家好,我是星恒 今天給大家?guī)淼念}目是一道簡單題目,主要幫大家復習一下字符串和字符的相關操作 給你兩個字符串:ransomNote 和 magazine ,判斷 ransomNote 能不能由 magazine 里面的字符構成。 如果可以,返回 true ;否則返回 false 。 magazine 中的每個字符只能在 ransom

    2024年01月21日
    瀏覽(21)
  • 【迎戰(zhàn)藍橋】 算法·每日一題(詳解+多解)-- day5

    【迎戰(zhàn)藍橋】 算法·每日一題(詳解+多解)-- day5

    ??目錄?? ??1. 數(shù)組中出現(xiàn)次數(shù)超過一半的數(shù)字 ??2.?二進制中1的個數(shù) ??3.?替換空格 【大家好,我是 愛干飯的猿 ,如果喜歡這篇文章, 點個贊 ??, 關注一下吧, 后續(xù)會一直分享題目與算法思路 】 描述 給一個長度為 n 的數(shù)組,數(shù)組中有一個數(shù)字出現(xiàn)的次數(shù)超過數(shù)組長

    2023年04月08日
    瀏覽(21)
  • 算法每日一題: 分割數(shù)組的最大值 | 動歸 | 分割數(shù)組 | 貪心+二分

    算法每日一題: 分割數(shù)組的最大值 | 動歸 | 分割數(shù)組 | 貪心+二分

    Hello,大家好,我是星恒 嗚嗚嗚,今天給大家?guī)淼挠质且坏澜?jīng)典的動歸難題。 題目:leetcode 410 給定一個非負整數(shù)數(shù)組 nums 和一個整數(shù) k ,你需要將這個數(shù)組分成 k_ 個非空的連續(xù)子數(shù)組。 設計一個算法使得這 k _個子數(shù)組各自和的最大值最小。 示例: 示例 1: 示例 2: 示例

    2024年01月22日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包