洛谷 P8674 [藍橋杯 2018 國 B] 調手表

文章目錄

  • [藍橋杯 2018 國 B] 調手表
    • 題目描述
    • 輸入格式
    • 輸出格式
    • 樣例 #1
      • 樣例輸入 #1
      • 樣例輸出 #1
    • 提示
  • 題意解析
  • CODE
  • 分析一下復雜度



[藍橋杯 2018 國 B] 調手表

題目描述

小明買了塊高端大氣上檔次的電子手表,他正準備調時間呢。

在 M78 星云,時間的計量單位和地球上不同,M78 星云的一個小時有 n n n 分鐘。

大家都知道,手表只有一個按鈕可以把當前的數加一。在調分鐘的時候,如果當前顯示的數是 0 0 0,那么按一下按鈕就會變成 1 1 1,再按一次變成 2 2 2。如果當前的數是 n ? 1 n-1 n?1,按一次后會變成 0 0 0

作為強迫癥患者,小明一定要把手表的時間調對。如果手表上的時間比當前時間多 1 1 1,則要按 n ? 1 n-1 n?1 次加一按鈕才能調回正確時間。

小明想,如果手表可以再添加一個按鈕,表示把當前的數加 k k k 該多好啊……

他想知道,如果有了這個 + k +k +k 按鈕,按照最優策略按鍵,從任意一個分鐘數調到另外任意一個分鐘數最多要按多少次。

注意,按 + k +k +k 按鈕時,如果加 k k k 后數字超過 n ? 1 , n-1, n?1, 則會對 n n n 取模。

比如, n = 10 , k = 6 n=10,k=6 n=10,k=6 的時候,假設當前時間是 0 0 0,連按 2 2 2 + k +k +k 按鈕,則調為 2 2 2

輸入格式

一行兩個整數 n , k n,k n,k,意義如題。

輸出格式

一行一個整數。表示:按照最優策略按鍵,從一個時間調到另一個時間最多要按多少次。

樣例 #1

樣例輸入 #1

5 3

樣例輸出 #1

2

提示

【樣例解釋】

如果時間正確則按 0 0 0 次。否則要按的次數和操作系列之間的關系如下:

  1. +1
  2. +1, +1
  3. +3
  4. +3, +1

【數據約定】

對于 30 % 30\% 30% 的數據 0 < k < n ≤ 5 0<k<n \le 5 0<k<n5

對于 60 % 60\% 60% 的數據 0 < k < n ≤ 100 0<k<n \le 100 0<k<n100

對于 100 % 100\% 100% 的數據 0 < k < n ≤ 1 0 5 0<k<n \le 10^5 0<k<n105

時限 3 秒, 256M。藍橋杯 2018 年第九屆國賽



題意解析

  • 對于手表的某一時刻,調到另一時刻最少需要按多少次,然后取最大次數。
    • 需要注意的是,我們有倆按鍵:+1+k
    • n = 10 , k = 6 n = 10, k = 6 n=10,k=6 舉例:
      舉例
      • 我們先從+0開始,這一步需要 0 0 0 次操作。
      • 從最少的操作,目前是 0 0 0 開始往后延伸:分別+1+6
        • +1:那么就是 0 + 1 = 1 0 + 1 = 1 0+1=1,也就是說+1操作需要 1 1 1 步。
        • +6:那么就是 0 + 6 = 6 0 + 6 = 6 0+6=6,也就是說+6操作需要 1 1 1 步。
      • 以此類推,每次都要以最小的那個操作數為源點往后延伸。

CODE

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
#define ll long long
#define INF 0x3f3f3f3f using namespace std;typedef pair<int, int> pii;  // 定義一個類型,表示一對整數const int N = 1E5 + 10, M = 2E5 + 10;
int n, k;  // n是點的數量,k是每次可以增加的步數
int h[N], e[M], ne[M], w[M],idx;  // h, e, ne用于存儲圖的信息,idx是當前邊的編號
int dist[N];  // dist用于存儲每個點到起點的最短距離
bool st[N];  // st用于標記每個點是否已經被訪問過
priority_queue<pii, vector<pii>, greater<pii>> heap;  // 定義一個小頂堆,用于存儲待處理的點
int maxnum = 0;  // 用于存儲最大的距離void add(int ver, int x){int des = (ver + x) % n;  // 計算下一個點的編號// 如果通過這條邊可以使得起點到終點的距離更短,就更新距離if(dist[des] > dist[ver] + 1){dist[des] = dist[ver] + 1;heap.push({dist[des], des});  // 將終點加入堆中}
}int dijkstra(){memset(dist, INF, sizeof dist);  // 初始化所有點到起點的距離為無窮大dist[0] = 0;  // 起點到自己的距離為0heap.push({0, 0});  // 將起點加入堆中while(heap.size()){auto t = heap.top();  // 取出堆頂元素heap.pop();int ver = t.second, dis = t.first;  // ver是點的編號,dis是起點到該點的距離if(st[ver]) continue;  // 如果該點已經被訪問過,就跳過st[ver] = true;  // 標記該點已經被訪問過maxnum = max(maxnum, dis);  // 更新最大的距離add(ver, 1), add(ver, k);  // 嘗試向前走一步和向前走k步}return maxnum;  // 返回最大的距離
}int main()
{cin >> n >> k;  // 輸入點的數量和每次可以增加的步數cout << dijkstra() << endl;  // 輸出最大的距離
}

分析一下復雜度

本題沒有m即邊數,而每次操作執行兩個情況,所以說邊數 m = 2 m = 2 m=2 是個常量,那么除了樸素 D i j k s t r a ( O ( n 2 ) ) Dijkstra\ (O(n^2)) Dijkstra?(O(n2)) 其他單源最短路應該都可以做。

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

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

相關文章

JVM虛擬機:命令行查看JVM垃圾回收器的執行信息

在eclipse中打開命令行窗口 window->show view->Terminal 這樣就打開了Terminal窗口&#xff0c;效果如下所示&#xff1a; java -XX:PrintCommandLineFlags -version 這個命令可以查看一些配置信息&#xff0c;其中最重要的配置信息就是&#xff0c;當前使用的G1回收器…

什么是漏洞掃描

漏洞掃描是指基于漏洞數據庫&#xff0c;通過掃描等手段對指定的遠程或者本地計算機系統的安全脆弱性進行檢測&#xff0c;發現可利用漏洞的一種安全檢測的 行為&#xff0c;也是一類重要的網絡安全技術。它和防火墻、入侵檢測系統互相配合&#xff0c;能夠有效提高網絡的安全性…

鍵盤打字盲打練習系列之成為大師——5

一.歡迎來到我的酒館 盲打&#xff0c;成為大師&#xff01; 目錄 一.歡迎來到我的酒館二.關于盲打你需要知道三.值得收藏的練習打字網站 二.關于盲打你需要知道 盲打系列教程&#xff0c;終于寫到終章了。。。一開始在看網上視頻&#xff0c;看到up主熟練的打字技巧&#xff…

LabVIEW與Tektronix示波器實現電源測試自動化

LabVIEW與Tektronix示波器實現電源測試自動化 在現代電子測試與測量領域&#xff0c;自動化測試系統的構建是提高效率和精確度的關鍵。本案例介紹了如何利用LabVIEW軟件結合Tektronix MDO MSO DPO2000/3000/4000系列示波器&#xff0c;開發一個自動化測試項目。該項目旨在自動…

javascript中Reflect是什么?三分鐘初識

目錄 1. Reflect是什么&#xff1f;2. 為什么會出現Reflect&#xff1f;3. 需要怎么去使用Reflect&#xff1f;4. 最終的結果解決什么&#xff1f;5. 使用的注意點6. 常用的技巧 Reflect是Javascript中的一個內置對象&#xff0c;它提供了一組用于操作對象的方法&#xff0c;可…

Spring - BeanFactory和FactoryBean的理解

BeanFactory是什么&#xff1f; BeanFactory是Spring 容器的根接口&#xff0c;它是IOC的基本容器&#xff0c;負責管理和加載Bean&#xff0c;它為具體的IOC容器提供了最基本的規范&#xff0c;比如DefaultListableBeanFactory和ConfigurableBeanFactory&#xff0c;BeanFact…

《C++新經典設計模式》之第17章 中介者模式

《C新經典設計模式》之第17章 中介者模式 中介者模式.cpp 中介者模式.cpp #include <iostream> #include <map> #include <memory> using namespace std;// 中介者封裝一系列的對象交互 // 4種角色 // Mediator&#xff08;抽象中介者類&#xff09;&#x…

MYSQL練題筆記-高級查詢和連接-指定日期的產品價格

這依舊是中等題&#xff0c;想了好久&#xff0c;終于理解了很開心&#xff01; 一、題目相關內容 1&#xff09;相關的表和題目 2&#xff09;幫助理解題目的示例&#xff0c;提供返回結果的格式 二、自己初步的理解 題目是找出2019-08-16 時全部產品的價格&#xff0c;所以…

數字化時代的到來,IT運維產業正在發生深刻的變革

IT運維產業是隨著信息技術的發展而產生的&#xff0c;它涵蓋了從硬件到軟件、從應用到數據、從終端到云端等各個方面的維護和管理。隨著數字化時代的到來&#xff0c;IT運維產業正在發生深刻的變革。其中&#xff0c;大數據技術的廣泛應用和數據資源的日益豐富&#xff0c;正在…

使用最小花費爬樓梯

1.狀態表示 2.狀態轉移方程 3.初始化 保證填表時&#xff0c; 不越界 4.填表順序 從左往右 5.返回值 解法2&#xff1a; 1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 從右往左 5.返回值 min( dp[0] , dp[1] ) ----------------------------------------------------…

java+springboot+ssm學生社團管理系統76c2e

本系統包括前臺和后臺兩個部分。前臺主要是展示社團列表、社團風采、社團活動、新聞列表等&#xff0c;前臺登錄后進入個人中心&#xff0c;在個人中心能申請加入社團、查看參加的社團活動等&#xff1b;后臺為管理員與社團負責人使用&#xff0c;應用于對社團的管理及內容發布…

Vue3源碼梳理:源碼目錄結構及源碼閱讀方法

VUE3 源碼目錄結構 1 ) 下載源碼三種方式 方式1&#xff0c;Download ZIP&#xff0c;不推薦方式2&#xff0c;通過https,或ssh或github cli來克隆項目 $ git clone https://github.com/vuejs/core.git$ git clone gitgithub.com:vuejs/core.git 方式3&#xff0c;點擊Fork, …

常見統計學習方法特點總結

1. 概述 方法適用問題模型特點模型類型學習策略損失函數學習算法1感知機二分類分離超平面判別模型極小化誤分點到超平面距離誤分點到超平面距離SGD2KNN多分類&#xff0c;回歸特征空間&#xff0c;樣本點判別模型---3樸素貝葉斯多分類特征與類別的聯合概率分布&#xff0c;條件…

【CMU 15-445】Proj2 Hash Index

EXTENDIBLE HASH INDEX 通關記錄Task1 Read/Write Page Guards移動構造函數Drop方法移動賦值運算符析構函數UpgradeRead函數FetchPageBasic、FetchPageRead、FetchPageWrite、NewPageGuarded Task2 Extendible Hash Table PagesHeaderPageDirectoryPageBucketPage Task3 Extend…

飛天使-linux操作的一些技巧與知識點5

文章目錄 roles批量替換文件 role 的依賴關系role 的實際案例 roles tasks 和 handlers &#xff0c;那怎樣組織 playbook 才是最好的方式呢&#xff1f;簡 單的回答就是&#xff1a;使用 Roles Roles 基于一個已知的文件結構&#xff0c;去自動的加載 vars&#xff0c;tasks 以…

Python字典去重竟然比集合去重快速40多倍

這里寫目錄標題 對比代碼結果圖代碼解析 對比代碼 from glob import glob from tqdm import tqdm import time path_listglob("E:/sky_150b/任務組_20231207_2023/*.jsonl") # for two in tqdm(path_list): onepath_list[0]with open(one,"r",encoding&q…

【C++】POCO學習總結(十):Poco::Util::Application(應用程序框架)

【C】郭老二博文之&#xff1a;C目錄 1、Poco::Util::Application 應用框架 1.1 應用程序基本功能 Poco::Util::Application是POCO實現的的應用程序框架&#xff0c;支持功能如下&#xff1a; 命令行參數處理配置文件初始化和關機日志 1.2 命令行程序和守護進程 POCO支持…

Java架構師系統架構實現高內聚低耦合

目錄 1 導語2 邊界內聚耦合概述3 聚焦內聚4 關注耦合5 如何實現高內聚低耦合6 內聚耦合規劃不當的效果7 總結想學習架構師構建流程請跳轉:Java架構師系統架構設計 1 導語 架構設計的核心維度,從系統的擴展性、高性能、高可用、高安全性和伸縮性五個維度進行了探討,并介紹了…

【Docker】進階之路:(一)容器技術發展史

【Docker】進階之路&#xff1a;&#xff08;一&#xff09;容器技術發展史 什么是容器為什么需要容器容器技術的發展歷程Docker容器是如何工作的 什么是容器 容器作為一種先進的虛擬化技術&#xff0c;已然成為了云原生時代軟件開發和運維的標準基礎設施。在了解容器技術之前…

抖音本地生活服務商申請入口在哪里?具體流程是怎樣的?

不論是抖音的本地生活業務&#xff0c;還是后來的支付寶、視頻號的本地生活業務&#xff0c;因為市場體量足夠龐大&#xff0c;市場前景廣闊&#xff0c;一直很受各大創業者的追捧。那么&#xff0c;如此火熱的本地生活項目&#xff0c;想要申請成為服務商&#xff0c;具體的申…