藍橋杯——外賣店優先級

外賣店優先級

題目分析

這一題一看N,M,T的范圍就知道不能暴力,要討巧,怎么討巧是重點。正常的思路是第一層for循環遍歷訂單(或者外賣店),第二層for循環遍歷外賣店(或者訂單),這樣可以求出每個外賣店是不是在緩存里面,但是時間復雜度是 O ( N ? M ) = 1 e 10 > 1 e 8 O(N*M)=1e10>1e8 O(N?M)=1e10>1e8,明顯是不行的。

說一下討巧的思路,訂單我是必然要遍歷的不然你不知道哪個外賣店有單子,那么可以不遍歷外賣店嗎?這就看我們如何處理訂單了。訂單應該是一個類,包含時間ts和外賣店id,我們優先對訂單按照外賣店id排序,id相同時再按照ts排序,排序規則如下,

static class message implements Comparable<message>{//存儲訂單信息int id,t;//訂單的id和時間public message(int t, int id) {this.id = id;this.t = t;}@Overridepublic int compareTo(message o) {if(this.id != o.id) {return this.id-o.id;}else {return this.t-o.t;}			}		}

現在可以開始遍歷訂單了,在遍歷的時候我要記錄兩個值,一個是cnt用來表示當前外賣店的優先級大小,一個是flag用來表示當前外賣店是否被放在緩存里面。一個是ans表示我知道的在緩存里面的外賣店的數量。

int flag = 0;//表示是否在優先級緩存中,在的flag=1,
int ans = 0;//記錄答案
int cnt = 2;//表示外賣店的優先級大小

對于當前訂單me[i],我要知道前一個訂單me[i-1]是否和他是同一個外賣店,如果是,那么說明我此時把me[i-1].id的外賣店的單子都遍歷完了,此時我要確定他是不是在緩存里面。兩步確定法,一是確定flag是否等于1,二十確定從最后一個單子的時間到時間t內,是否會使他的優先級減少到小于等于3的情況。

if(me[i].id!=me[i-1].id) {//如果變成下一個外賣店了,就要檢查剛剛那個外賣店是不是在緩存中的//falg=1并且到達t時,沒有小于等于3if(flag == 1 && (cnt - (t - me[i-1].t) > 3 )) {ans++;}cnt = 2;//此時是me[i].id有單子,那么cnt初始值應該是2flag = 0;//重置flag
}

否則的話,先求從上一個訂單到當前這個訂單,外賣店的優先級降低了多少,也就是經歷的時間。那么這里為什么是int diff = me[i].t - me[i-1].t - 1;呢?舉個例子,假設當前的時間是4,前一個的時間是2,那么中間沒有訂單的時間就是ts=3時,因此優先級應該降低1,那么也就是4-2-1。但是注意,如果出現了當前的時間是4,前一個的時間也是4,會出現4-4-1=-1的情況,但是實際此時應該優先級降低0,所以會有if(diff == -1) diff = 0;。那么這個if(cnt <= 3)一定要在cnt += 2;之前判斷,舉個例子,假設外賣店的當前優先級是4,那么diff=2,4減2等于2,此時應該被移出優先級緩存的,但是如果在判斷之前我先給他加了2,那么此時2+2=4>3,他就不會移出優先級緩存,造成結果錯誤。

else {int diff = me[i].t - me[i-1].t - 1;//優先級降低了多少 me[i].t=1  me[i-1].t=1if(diff == -1) diff =  0;cnt = Math.max(0, cnt - diff);//如果優先級降低到了負數,那么他就是0if(cnt <= 3) flag = 0;//如果小于等于3會被移出緩存cnt += 2;//出現了訂單,優先級加2.if(cnt > 5) flag = 1;//如果大于5會被加入緩存
}

注意,最后一個外賣店,我沒有判斷它是否在緩存里面,所以for循環結束后要判斷

//對最后一個訂單/最后一個外賣店進行判斷
if(flag == 1 && (cnt - (t - me[m-1].t) > 3 )) {ans++;
}
System.out.println(ans);

題目代碼

import java.util.Arrays;
import java.util.Scanner;
public class Main{static class message implements Comparable<message>{//存儲訂單信息int id,t;//訂單的id和時間public message(int t, int id) {this.id = id;this.t = t;}@Overridepublic int compareTo(message o) {if(this.id != o.id) {return this.id-o.id;}else {return this.t-o.t;}			}		}
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int t = scanner.nextInt();message[] me = new message[m];for (int i = 0; i < me.length; i++) {me[i] =new message(scanner.nextInt(), scanner.nextInt());}Arrays.sort(me);int flag = 0;//表示是否在優先級緩存中,在的flag=1,int ans = 0;//記錄答案int cnt = 2;//表示外賣店的優先級大小for (int i = 1; i < m; i++) {if(me[i].id!=me[i-1].id) {//如果變成下一個外賣店了,就要檢查剛剛那個外賣店是不是在緩存中的//falg=1并且到達t時,沒有小于等于3if(flag == 1 && (cnt - (t - me[i-1].t) > 3 )) {ans++;}cnt = 2;//此時是me[i].id有單子,那么cnt初始值應該是2flag = 0;//重置flag}else {int diff = me[i].t - me[i-1].t - 1;//優先級降低了多少 me[i].t=1  me[i-1].t=1if(diff == -1) diff =  0;cnt = Math.max(0, cnt - diff);if(cnt <= 3) flag = 0;cnt += 2;if(cnt > 5) flag = 1;}}//對最后一個訂單/最后一個外賣店進行判斷//講日期模擬器的時候,whie循環結束后,也得有一個if語句,對最后一個日期進行檢查if(flag == 1 && (cnt - (t - me[m-1].t) > 3 )) {ans++;}System.out.println(ans);
}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719602.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue中 computed 和 watch

在Vue框架中&#xff0c;computed和watch都用于響應數據的變化&#xff0c;但它們在使用上有著不同的側重點和機制。具體分析如下&#xff1a; 1. 功能差異 computed是計算屬性&#xff0c;它是基于它們的響應式依賴進行緩存的。只有當依賴的數據發生變化時&#xff0c;compu…

2827. 范圍中美麗整數的數目

文章目錄 題意思路代碼 題意 題目鏈接 思路 按位dp暴力 代碼 // 暴力 class Solution { public:int numberOfBeautifulIntegers(int low, int high, int k) {int l low / k;int r high / k;if (low % k)l;int ans 0;while (l < r){int tmp l * k;if (10 < tmp &…

華為數通方向HCIP-DataCom H12-821題庫(多選題:61-80)

第61題 ACL 可分為如下哪些類別? A.用戶自定義 ACL B.基本 ACL C.二層ACL D.高級ACL 【參考答案】ABCD 【答案解析】 A. 用戶自定義 ACL (User-defined ACL): 這是用戶根據自身需求自定義的 ACL,用于實現特定的訪問控制策略。B.基本 ACL (Standard ACL): 基本 ACL 是基于源 …

OCP Secure boot必要特性

三點必需要求&#xff1a; The platform components must: 1. Provide a mechanism for securely anchoring a root of trust public key. // 提供一種用于安全地錨定信任根公鑰的機制。 2. Verify the device firmware digital signature using the anchored public key /…

北京大學發布,將試錯引入大模型代理學習!

引言&#xff1a;探索語言智能的新邊界 在人工智能的發展歷程中&#xff0c;語言智能始終是一個核心的研究領域。隨著大語言模型&#xff08;LLM&#xff09;的興起&#xff0c;我們對語言智能的理解和應用已經邁入了一個新的階段。這些模型不僅能夠理解和生成自然語言&#x…

動態規劃(四)背包dp

01背包 完全背包 多重背包 二維費用背包 分組背包 混合背包

【算法分析與設計】組合

&#x1f4dd;個人主頁&#xff1a;五敷有你 &#x1f525;系列專欄&#xff1a;算法分析與設計 ??穩中求進&#xff0c;曬太陽 題目 給定兩個整數 n 和 k&#xff0c;返回范圍 [1, n] 中所有可能的 k 個數的組合。 你可以按 任何順序 返回答案。 示例 示例 1&…

25考研習題記錄

3月 湯家鳳《1800》 基礎篇 日期高等數學線性代數概率論3.1 P92-93 P212-214 3.4 P10-15 P10-19 極限題62題 P73-74 P170-172 行列式17題 考研競賽凱哥每日一題 張宇高數30講頁數3.4P74

【計算機學習】-- 電腦的組裝和外設

系列文章目錄 文章目錄 系列文章目錄前言一、電腦的組裝1.CPU2.主板3.顯卡4.硬盤5.內存6.散熱器7.電源8.機箱 二、電腦外設選用1.顯示器2.鼠標3.鍵盤4.音響 總結 前言 一、電腦的組裝 1.CPU 返回目錄 認識CPU CPU&#xff0c;即中央處理器&#xff0c;負責電腦資源的調度安…

計算機網絡-網絡安全(一)

1.網絡安全威脅和漏洞類型&#xff1a; 竊聽 假冒 重放 流量分析 破環完整 病毒 木馬 誹謗 非授權訪問 拒絕服務 漏洞&#xff1a;物理、軟件、不兼容、其他等。 2.網絡安全信息數據五大特征&#xff1a; 完整性&…

【.NET Core】深入理解IO - 讀取器和編寫器

【.NET Core】深入理解IO - 讀取器和編寫器 文章目錄 【.NET Core】深入理解IO - 讀取器和編寫器一、概述二、BinaryReader和BinaryWriter2.1 BinartReader類2.2 BinaryWriter類 三、StreamReader和StreamWriter3.1 StreamReader類3.1 StreamWriter類StreamWriter類構造函數Str…

Leetcode 3072. Distribute Elements Into Two Arrays II

Leetcode 3072. Distribute Elements Into Two Arrays II 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3072. Distribute Elements Into Two Arrays II 1. 解題思路 這一題不太明白為啥被劃分為了hard的題目&#xff0c;我們只需要按照題意構造一下arr1和arr2即可&#xff…

優化自動窗簾系統

要優化自動窗簾系統的代碼&#xff0c;我們可以考慮以下幾個方面&#xff1a; (1)模塊化設計&#xff1a;將不同的功能&#xff08;如讀取光強度、控制窗簾等&#xff09;分解成獨立的函數&#xff0c;以提高代碼的可讀性和可維護性。 (2)錯誤處理&#xff1a;增加錯誤處理機制…

【Vue】探究 Vue 2 與 Vue 3 生命周期:變化與延續

&#x1f497;&#x1f497;&#x1f497;歡迎來到我的博客&#xff0c;你將找到有關如何使用技術解決問題的文章&#xff0c;也會找到某個技術的學習路線。無論你是何種職業&#xff0c;我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章&#xff0c;也歡…

paper-ai :搜索真實文獻并生成引用真實文獻的AI論文

paper-ai &#xff1a;搜索真實文獻并生成引用真實文獻的AI論文。 項目簡介 使用真實文獻最快速完成論文的方法 利用人工智能撰寫論文 人工智能書寫功能&#xff1a;點擊 "AI 寫作 "進行正常對話互動。人工智能將根據您的輸入提供寫作建議或回答問題。 尋找文獻功能…

C/C++工程師面試題(STL篇)

STL 中有哪些常見的容器 STL 中容器分為順序容器、關聯式容器、容器適配器三種類型&#xff0c;三種類型容器特性分別如下&#xff1a; 1. 順序容器 容器并非排序的&#xff0c;元素的插入位置同元素的值無關&#xff0c;包含 vector、deque、list vector&#xff1a;動態數組…

DocxToDoc.java

DocxToDoc.java word高版本docx轉化word2003版本 package word;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagrap…

【Ubuntu 20.04 / 22.04 LTS】最新 esp-matter SDK 軟件編譯環境搭建步驟

倉庫鏈接&#xff1a;esp-matter SDK官方軟件說明&#xff1a;ESP Matter Programming Guide官方參考文檔&#xff1a;使用 Matter-SDK 快速搭建 Matter 環境 (Linux) 環境要求 Ubuntu 20.04 或 Ubuntu22.04網絡環境支持訪問 Gihub 在安裝 esp-matter SDK 軟件編譯環境之前&a…

三八女神節特別推薦:完美禮物俘獲她的芳心

三八女神節馬上就要到了&#xff0c;這是一個贊頌女性獨立、堅韌與美麗的時刻。在這個充滿溫馨與敬意的日子里&#xff0c;很多人想要為那些綻放光彩的女性們獻上一份特別的禮物。這不僅是一份物質上的饋贈&#xff0c;更是一份心靈上的交流&#xff0c;一次情感上的共鳴。 真…

面試經典150題——簡化路徑

"A goal is a dream with a deadline." - Napoleon Hill 1. 題目描述 2. 題目分析與解析 2.1 思路一 這個題目開始看起來并不太容易知道該怎么寫代碼&#xff0c;所以不知道什么思路那就先模擬人的行為&#xff0c;比如對于如下測試用例&#xff1a; 首先 /代表根…