[GESP202312 五級] 平均分配

文章目錄

  • 題目描述
  • 輸入格式
  • 輸出格式
  • 輸入輸出樣例 #1
    • 輸入 #1
    • 輸出 #1
  • 輸入輸出樣例 #2
    • 輸入 #2
    • 輸出 #2
  • 提交鏈接
  • 提示
  • 解析
  • 參考代碼

題目描述

小楊認為,所有大于等于 a a a 的完全平方數都是他的超級幸運數。

小楊還認為,所有超級幸運數的倍數都是他的幸運數。自然地,小楊的所有超級幸運數也都是幸運數。

對于一個非幸運數,小楊規定,可以將它一直 + 1 +1 +1,直到它變成一個幸運數。我們把這個過程叫做幸運化。例如,如果 a = 4 a=4 a=4,那么 4 4 4 是最小的幸運數,而 1 1 1 不是,但我們可以連續對 1 1 1 3 3 3 + 1 +1 +1 操作,使其變為 4 4 4,所以我們可以說, 1 1 1幸運化后的結果是 4 4 4

現在,小楊給出 N N N 個數,請你首先判斷它們是不是幸運數;接著,對于非幸運數,請你將它們幸運化。

輸入格式

第一行 2 2 2 個正整數 a , N a, N a,N

接下來 N N N 行,每行一個正整數 x x x ,表示需要判斷(幸運化)的數。

輸出格式

輸出 N N N 行,對于每個給定的 x x x ,如果它是幸運數,請輸出 lucky,否則請輸出將其幸運化后的結果。

輸入輸出樣例 #1

輸入 #1

2 4 
1 
4 
5 
9

輸出 #1

4 
lucky 
8 
lucky

輸入輸出樣例 #2

輸入 #2

16 11 
1 
2 
4 
8 
16 
32 
64 
128 
256 
512
1024

輸出 #2

16 
16 
16 
16 
lucky 
lucky 
lucky 
lucky 
lucky 
lucky 
lucky

提交鏈接

平均分配

提示

樣例解釋 1

雖然是完全平方數,但它小于 a a a,因此它并不是超級幸運數,也不是幸運數。將其進行 3 3 3 + 1 +1 +1 操作后,最終得到幸運數 4 4 4。4是幸運數,因此直接輸出 lucky

5 5 5 不是幸運數,將其進行 3 3 3 + 1 +1 +1 操作后,最終得到幸運數 8 8 8

9 9 9 是幸運數,因此直接輸出 lucky

數據規模

對于 30 % 30\% 30% 的測試點,保證 a , x ≤ 100 , N ≤ 100 a,x \le 100,N \le 100 a,x100,N100

對于 60 % 60\% 60% 的測試點,保證 a , x ≤ 1 0 6 a,x \le 10^6 a,x106

對于所有測試點,保證 a ≤ 1 , 000 , 000 a \le 1,000,000 a1,000,000;保證 N ≤ 2 × 1 0 5 N \le 2 \times 10^5 N2×105;保證 1 ≤ x ≤ 1 , 000 , 001 1 \le x \le 1,000,001 1x1,000,001

解析

此題的關鍵,找出:

  1. 找出所有超級幸運數:即大于等于 a a a 的完全平方數;

  2. 找出所有幸運數:所有超級幸運數及它們的倍數。

先考慮 30 % 30\% 30% 的數據。

此時的 a a a x x x 的最大范圍為 100 100 100。我們可以暴力枚舉一定范圍,把這個范圍內的完全平方數全部找到。 a ~ 1000 a \sim 1000 a1000 這個范圍一定是完全足夠。

v i s [ ] vis[] vis[] 來標記幸運數
枚舉完全平方數及其倍數

//判斷一個數 是否為完全平方數
bool check(int x)
{int ave = sqrt(x);return ave * ave == x;
}vector<int>ans;  //存儲 1e3 范圍內的幸運數字
//只考慮1e3的數據 看能過多少測試點
for(int i = a; i <= Mx; i++)
{if(check(i)){if(!vis[i]){ans.push_back(i);vis[i] = true;//考慮1e3范圍內的超級幸運數的倍數int rate = 2;while(rate * i <= Mx)  //考慮超級幸運數的倍數 {if(!vis[rate * i]){ans.push_back(rate * i);vis[rate * i] = true;}rate++;}}}
}

對于輸入的 n n n 個數 x x x。若被標記則輸出lucky,否則我們可以根據二分找到第一個大于 x x x 的位置輸出。

sort(ans.begin() , ans.end());  //從小到大排序
for(int i = 1; i <= n; i++)
{if(vis[x[i]])cout << "lucky" << endl;else{int pos = upper_bound(ans.begin() , ans.end() , x[i]) - ans.begin();cout << ans[pos] << endl;}}

對于 100 % 100\% 100% 的數據。
a ≤ 1 , 000 , 000 a \le 1,000,000 a1,000,000 1 ≤ x ≤ 1 , 000 , 001 1 \le x \le 1,000,001 1x1,000,001

最極端的情況, x x x 1000001 1000001 1000001 a a a 1000000 1000000 1000000,若沒有倍數的情況,大于 a a a 的最小的完全平方數為 1002001 1002001 1002001

我們可以借助 30 % 30\% 30% 數據的思路,對代碼進行優化,分析時間復雜度。

平方數從 s q r t ( a ) sqrt(a) sqrt(a) 開始,最大的范圍到 1002001 ( 1001 ? 1001 = 1002001 ) 1002001(1001 * 1001 = 1002001) 1002001(1001?1001=1002001)

for (int i = ceil(sqrt(a)); i <= 1001; i++)

對于每一個完全平方數我們依然選出其倍數進行存儲。

// 能得出當x=1000001 最差的幸運數為1002001,1002001為完全平方數
for (int i = ceil(sqrt(a)); i <= 1001; i++)
{int x = i * i; // x為完全平方數for (int j = 1; j * x <= 1002001; j++){if (!vis[x * j])   //超級幸運數的倍數{ans.push_back(x * j);vis[x * j] = true;}}
}

此題的難點在于分析時間復雜度,考慮上述預處理代碼的時間復雜度:

遍歷從 a a a u p = 1002001 up = 1002001 up=1002001

  • 如果 i i i 是完全平方數,就遍歷它的所有倍數 j = i , 2 i , 3 i , . . . , u p j = i, 2i, 3i, ..., up j=i,2i,3i,...,up,時間為 O ( u p / i ) O(up / i) O(up/i)

一共操作的次數: ∑ i 2 ≥ a u p u p i 2 \sum_{i^2≥a}^{\sqrt{up}} \frac{up}{i^2} i2aup ??i2up?

化簡后,求和為一個收斂常數,時間復雜度大約為 1 e 6 1e6 1e6 級別。

預處理后,對于每一個數 判斷標記 + 二分 進行輸出。

參考代碼

#include <bits/stdc++.h>
using namespace std;bool vis[1100000];int main()
{int a, n;cin >> a >> n;vector<int> ans; // 存儲幸運數字// 能得出當x=1000001 最差的幸運數為1002001,1002001為完全平方數for (int i = ceil(sqrt(a)); i <= 1001; i++){int x = i * i; // x為完全平方數for (int j = 1; j * x <= 1002001; j++){if (!vis[x * j])   //超級幸運數的倍數{ans.push_back(x * j);vis[x * j] = true;}}}sort(ans.begin() , ans.end());while (n--){int x;cin >> x;if (vis[x])cout << "lucky" << endl;else{int pos = upper_bound(ans.begin(), ans.end(), x) - ans.begin();cout << ans[pos] << endl;}}return 0;
}

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

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

相關文章

[Mysql]buffersize修改

1、找到my.cnf文件位置 ps -ef|grep mysqld 2、編輯my.cnf cd /etc/my.cnf.d vim my.cnf 一般修改為內存的50%~70% 3、重啟服務 systemctl restart mysqld

清晰易懂的 Apollo 配置中心安裝與使用教程

Apollo 是攜程開源的分布式配置管理平臺&#xff0c;支持配置實時推送、版本管理、權限控制等功能。本教程將手把手教你完成 Apollo 核心組件安裝、基礎配置管理及避坑指南&#xff0c;助你快速掌握企業級配置管理能力。 一、環境準備&#xff08;關鍵依賴&#xff09; 1. 基礎…

PyTorch池化層詳解:原理、實現與示例

池化層&#xff08;Pooling Layer&#xff09;是卷積神經網絡中的重要組成部分&#xff0c;主要用于降低特征圖的空間維度、減少計算量并增強模型的平移不變性。本文將通過PyTorch代碼演示池化層的實現原理&#xff0c;并詳細講解最大池化、平均池化、填充&#xff08;Padding&…

如何構建并優化提示詞?

提示詞是一個小白最容易上手大模型的方式&#xff0c;提示詞就是你告訴大模型應該如何去完成一項工作的系統性的命令&#xff0c;所以寫一個好的提示詞是比較關鍵的&#xff0c;那么如何寫好一個提示詞呢&#xff1f; 要寫好提示詞&#xff0c;其實就像我們要把一些命令清晰地傳…

面向大模型的開發框架LangChain

這篇文章會帶給你 如何使用 LangChain&#xff1a;一套在大模型能力上封裝的工具框架如何用幾行代碼實現一個復雜的 AI 應用面向大模型的流程開發的過程抽象 文章目錄 這篇文章會帶給你寫在前面LangChain 的核心組件文檔&#xff08;以 Python 版為例&#xff09;模型 I/O 封裝…

【藍橋杯】動態規劃:線性動態規劃

1. 最長上升子序列(LIS) 1.1. 題目 想象你有一排數字,比如:3, 1, 2, 1, 8, 5, 6 你要從中挑出一些數字,這些數字要滿足兩個條件: 你挑的數字的順序要和原來序列中的順序一致(不能打亂順序) 你挑的數字要一個比一個大(嚴格遞增) 問:最多能挑出多少個這樣的數字? …

vue2和vue3的主要區別

一、性能優化與響應式系統 性能優化&#xff1a; Vue2&#xff1a;性能較好&#xff0c;但在大型應用中&#xff0c;當數據變化頻繁時可能出現性能瓶頸。它使用虛擬DOM來高效地進行DOM操作&#xff0c;并通過多種技術手段如懶加載、異步組件、樹形抖動等優化性能。 Vue3&…

Python: 實現數據可視化分析系統

后端基于Python 開源的 Web 框架 Flask&#xff0c;前端頁面采用 LayUI 框架以及 Echarts 圖表&#xff0c;數據庫為sqlite。系統的功能模塊分為數據采集和存儲模塊、數據處理和分析模塊、可視化展示模塊和系統管理模塊。情感分析方面使用LDA等主題建模技術&#xff0c;結合領域…

深度學習總結(3)

數據批量的概念 通常來說&#xff0c;深度學習中所有數據張量的第一個軸&#xff08;也就是軸0&#xff0c;因為索引從0開始&#xff09;都是樣本軸[samples axis&#xff0c;有時也叫樣本維度&#xff08;samples dimension&#xff09;?]?。深度學習模型不會一次性處理整個…

微軟慶祝它成立整整50周年

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【操作系統(Linux)】——通過案例學習父子進程的線程異步性

本篇旨在通過幾個案例來學習父子進程的線程異步性 一、父進程與子進程 我們將要做的&#xff1a; 創建父子進程&#xff0c;觀察父子進程執行的順序&#xff0c;了解進程執行的異步行為 源代碼&#xff1a; #include <stdio.h> #include <sys/types.h> #include…

系統性能核心指標:QPS、TPS、RT、并發量詳解

系統性能核心指標&#xff1a;QPS、TPS、RT、并發量詳解 1. 引言 在分布式系統、高并發架構設計中&#xff0c;QPS、TPS、RT、并發量 等指標是衡量系統性能的關鍵。本文深入解析這些術語的定義、計算方法、關聯性及優化策略&#xff0c;幫助開發者更好地進行系統性能評估與調…

PortswiggerLab:Exploiting a mass assignment vulnerability

實驗目標 To solve the lab, find and exploit a mass assignment vulnerability to buy a Lightweight l33t Leather Jacket. You can log in to your own account using the following credentials: wiener:peter. 官方WP In Burps browser, log in to the application using…

卡爾曼濾波器的工作原理

原文: https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/ 1 概述 你可以對某個動態系統有不確定信息的任何地方使用卡爾曼濾波器&#xff0c;并且對系統下一步的狀態做出有根據的猜測。即使出現混亂的現實狀態&#xff0c;卡爾曼濾波器都會給出一個合理的結果。…

PDFtk

如果下載的pdf文件有秘鑰的話&#xff0c;使用下面linux命令去掉秘鑰&#xff1a; pdftk 納稅記錄.pdf input_pw 261021 output 納稅記錄_output.pdf將多個單頁pdf合并為一個pdf的linux命令: pdftk 自然人電子稅務局1.pdf 自然人電子稅務局2.pdf 自然人電子稅務局3.pdf 自然人…

Openlayers:海量圖形渲染之WebGL渲染

最近由于在工作中涉及到了海量圖形渲染的問題&#xff0c;因此我開始研究相關的解決方案。我在網絡上尋找相關的解決方案時發現許多的文章都提到利用Openlayers中的WebGLPointsLayer類&#xff0c;可以實現渲染海量的點&#xff0c;之后我又了解到利用WebGLVectorLayer類可以渲…

替換jeecg圖標

替換jeecg圖標 ant-design-vue-jeecg/src/components/tools/Logo.vue <!-- <img v-else src"~/assets/logo.svg" alt"logo">-->

Codeforces Round 970 (Div. 3)題解

題目地址 https://codeforces.com/contest/2008 銳評 本次D3的前四題還是比較簡單的&#xff0c;沒啥難度區分&#xff0c;基本上差不多&#xff0c;屬于手速題。E的碼量比F大一些&#xff0c;實現略顯復雜一些。G的數學思維較明顯&#xff0c;如果很久沒有訓練這個知識點&a…

操作系統:線程間同步之事件集

事件集是線程間同步的機制之一&#xff0c;一個事件集可以包含多個事件&#xff0c;利用事件集可以完成一對多、多對多的線程間同步。 目錄 一、事件集舉例說明 二、事件集工作機制 三、RT-Thread為實例說明 四、事件集的應用場合 一、事件集舉例說明 以坐公交車為例&…

基于springboot鉆孔數據管理系統的設計與實現(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 本鉆孔數據管理系統采用B/S架構&#xff0c;數據庫是MySQL&#xff0c;網站的搭建與開發采用了先進的Java語言、Hadoop、數據可視化技術進行編寫&#xff0c;使用了Spring Boot框架。該系統從兩個對象&#xff1a;由管理員和用戶來對系統進行設計構建。用戶主要功能包括&…