1. 程式人生 > >【NOIP】一篇正式的NOIP2017總結

【NOIP】一篇正式的NOIP2017總結

【注:程式碼全部放在最後連結】

Day1

T1 小凱的疑惑

【題目描述】

小凱手中有兩種面值的金幣,兩種面值均為正整數且彼此互素。每種金幣小凱都有 無數個。在不找零的情況下,僅憑這兩種金幣,有些物品他是無法準確支付的。現在小 凱想知道在無法準確支付的物品中,最貴的價值是多少金幣?注意:輸入資料保證存在 小凱無法準確支付的商品。

【輸入格式】
輸入資料僅一行,包含兩個正整數 aa 和 bb,它們之間用一個空格隔開,表示小凱手 中金幣的面值。

【輸出格式】
輸出檔案僅一行,一個正整數 NN,表示不找零的情況下,小凱用手中的金幣不能準確支付的最貴的物品的價值。

輸入樣例#1:
3 7
輸出樣例#1:
11

【輸入輸出樣例 1 說明】

小凱手中有面值為3和7的金幣無數個,在不找零的前提下無法準確支付價值為1、 2、4、5、8、11 的物品,其中最貴的物品價值為 11,比 11 貴的物品都能買到,比如:

12=3×4+7×0
13=3×2+7×1
14=3×0+7×2
15=3×5+7×0

【資料範圍與約定】
對於 30%的資料:1a,b501a,b50
對於 60%的資料: 1a,b1041a,b104
對於 100%的資料:1a,b1091a,b109

【題目分析】
作為NOIP DAY1T1,個人認為題目不算太好。這樣的規律性題目對於水平不高的選手來說是很吃虧的,對於超暴力打表選手反而是賺到了。
考試的時候立刻想到了擴充套件GCD,然後就推了三張紙,耗時1.5h,直接導致後面沒時間做。這樣做明顯是不理智的,其實在0.5h過後就應該嘗試尋找規律,雖然最後推出來了,但對於T2T3的影響顯然更大。下一次要轉變做題思路。

【解題思路】
在碼T2時想到了簡單的證明。以下是證明:

首先
gcd(A,B)=1lcm(A,B)=AB
定義【剩餘類】:把所有整數劃分成m個等價類,每個等價類由相互同餘的整陣列成

任何數分成m個剩餘類,分別為 mkmk+1mk+2mk+(m1)
分別記為0(modm)1(modm)

而n的倍數肯定分佈在這m個剩餘類中,並且是平均分配。

kmin=min{k|nk{i(modm))},i[0,m)
nkmin 是 {i(modm)}中n的最小倍數。特別的,nm{0(modm)}
nkmin是個標誌,它表明{i(modm)}中nkmin 後面所有數,即n

kmin+jm必定都能被組合出來

那也說明最大不能組合數必定小於nkmin
我們開始尋找max{ nkmin}
lcm(m,n)=mn,所以很明顯(m1)n是最大的
因為(m1)nnkmin 中的最大值,所以在剩下的m1個剩餘類中,必定有比它小並且能被m和n組合,
這些數就是(m1)n1(m1)n2(m1)n(m1)
所以最大不能被組合數就是(m1)nm

如果m和n不互素,那{1 (mod m)}不能被m組合,同樣也不能被n和m組合

不要問我為什麼我程式寫的式子這麼奇怪。

T2 小凱的疑惑

題目描述

小明正在學習一種新的程式語言 A++,剛學會迴圈語句的他激動地寫了好多程式並 給出了他自己算出的時間複雜度,可他的程式設計老師實在不想一個一個檢查小明的程式, 於是你的機會來啦!下面請你編寫程式來判斷小明對他的每個程式給出的時間複雜度是否正確。

A++語言的迴圈結構如下:

F i x y
迴圈體
E

其中F i x y表示新建變數 ii(變數 ii 不可與未被銷燬的變數重名)並初始化為 xx, 然後判斷 ii 和 yy 的大小關係,若 ii 小於等於 yy 則進入迴圈,否則不進入。每次迴圈結束後 ii 都會被修改成 i +1i+1,一旦 ii 大於 yy 終止迴圈。

xx 和 yy 可以是正整數(xx 和 yy 的大小關係不定)或變數 nn。nn 是一個表示資料規模的變數,在時間複雜度計算中需保留該變數而不能將其視為常數,該數遠大於 100。

“E”表示迴圈體結束。迴圈體結束時,這個迴圈體新建的變數也被銷燬。

注:本題中為了書寫方便,在描述複雜度時,使用大寫英文字母“O”表示通常意義下“Θ”的概念。

輸入格式:
輸入檔案第一行一個正整數 tt,表示有 ttt10t10個程式需要計算時間複雜度。 每個程式我們只需抽取其中 F i x y和E即可計算時間複雜度。注意:迴圈結構 允許巢狀。

接下來每個程式的第一行包含一個正整數 LL 和一個字串,LL 代表程式行數,字元 串表示這個程式的複雜度,O(1)表示常數複雜度,O(n^w)表示複雜度為nw
,其 中w是一個小於100的正整數(輸入中不包含引號),輸入保證複雜度只有O(1)和O(n^w) 兩種型別。

接下來 LL 行代表程式中迴圈結構中的F i x y或者 E。 程式行若以F開頭,表示進入一個迴圈,之後有空格分離的三個字元(串)i x y, 其中 ii 是一個小寫字母(保證不為nn),表示新建的變數名,xx 和 yy 可能是正整數或 nn ,已知若為正整數則一定小於 100。

程式行若以E開頭,則表示迴圈體結束。

輸出格式:
輸出檔案共 tt 行,對應輸入的 tt 個程式,每行輸出Yes或No或者ERR(輸出中不包含引號),若程式實際複雜度與輸入給出的複雜度一致則輸出Yes,不一致則輸出No,若程式有語法錯誤(其中語法錯誤只有: ① F 和 E 不匹配 ②新建的變數與已經存在但未被銷燬的變數重複兩種情況),則輸出ERR 。

注意:即使在程式不會執行的迴圈體中出現了語法錯誤也會編譯錯誤,要輸出 ERR。

【輸入樣例】
8
2 O(1)
F i 1 1
E
2 O(n^1)
F x 1 n
E
1 O(1)
F x 1 n
4 O(n^2)
F x 5 n
F y 10 n
E
E
4 O(n^2)
F x 9 n
E
F y 2 n
E
4 O(n^1)
F x 9 n
F y n 4
E
E
4 O(1)
F y n 4
F x 9 n
E
E
4 O(n^2)
F x 1 n
F x 1 10
E

【輸出樣例】
Yes
Yes
ERR
Yes
No
Yes
Yes
ERR

【題目分析】
一道大模擬題目,考試的時候做的還是很快的,只用了15min,debug10min,但是由於我的判斷先後順序錯了,掛了一個點,很驚奇。

【解題思路】
按題目模擬即可,注意幾個判斷的先後順序。

T3逛公園

【題目描述】

策策同學特別喜歡逛公園。公園可以看成一張N個點M條邊構成的有向圖,且沒有 自環和重邊。其中1號點是公園的入口,NN號點是公園的出口,每條邊有一個非負權值, 代表策策經過這條邊所要花的時間。

策策每天都會去逛公園,他總是從1號點進去,從N號點出來。

策策喜歡新鮮的事物,它不希望有兩天逛公園的路線完全一樣,同時策策還是一個 特別熱愛學習的好孩子,它不希望每天在逛公園這件事上花費太多的時間。如果1號點 到N號點的最短路長為d,那麼策策只會喜歡長度不超過d+K的路線。

策策同學想知道總共有多少條滿足條件的路線,你能幫幫它嗎?

為避免輸出過大,答案對P取模。

如果有無窮多條合法的路線,請輸出−1。

【輸入格式】
第一行包含一個整數 T, 代表資料組數。

接下來T組資料,對於每組資料: 第一行包含四個整數 N,M,K,P,每兩個整數之間用一個空格隔開。

接下來M行,每行三個整數ai,bi,ci,代表編號為ai,

相關推薦

NOIP正式NOIP2017總結

【注:程式碼全部放在最後連結】 Day1 T1 小凱的疑惑 【題目描述】 小凱手中有兩種面值的金幣,兩種面值均為正整數且彼此互素。每種金幣小凱都有 無數個。在不找零的情況下,僅憑這兩種金幣,有些物品他是無法準確支付的。現在小 凱想知道在無法準確支

收藏快速幫企業轉型區塊鏈的錦囊

不同 標準 兼容 決定 開發環境 評估 去中心化 舉例 狀態 無論對於哪一項技術來說,衡量技術成熟的標誌都在於這項技術的最終落地。對於區塊鏈這個行業來說,大家最關心的莫過於,什麽樣的企業適合踏入區塊鏈這個領域?以及什麽樣的應用可以解決當下企業、用戶遇到的一些問題。在10月1

經典文章初識大資料,及大資料相關框架Hadoop、spark、flink等

今天看到一篇講得比較清晰的框架對比,這幾個框架的選擇對於初學分散式運算的人來說確實有點迷茫,相信看完這篇文章之後應該能有所收穫。 簡介 大資料是收集、整理、處理大容量資料集,並從中獲得見解所需的非傳統戰略和技術的總稱。雖然處理資料所需的計算能力或儲存容量早已超過一

關於卷積的通俗易懂的文章

作者用最通俗的語言詮釋了卷積,覺得不錯,公式太抽象,這樣解釋就易懂很多。原文出處不詳。最近總是和卷積打交道,工作需要,每天都要碰到它好幾次,不勝煩惱,因為在大學時候學訊號與系統的時候就沒學會,我於是心想一定要把卷積完全搞明白。正好同辦公室的同學也問我什麼是卷積,師姐昨天也告訴

面試文章幫你徹底搞清楚“I/O多路複用”和“非同步I/O”的前世今生

曾經的VIP服務在網路的初期,網民很少,伺服器完全無壓力,那時的技術也沒有現在先進,通常用一個執行緒來全程跟蹤處理一個請求。因為這樣最簡單。其實程式碼實現大家都知道,就是伺服器上有個ServerSocket在某個埠監聽,接收到客戶端的連線後,會建立一個Socket,並把它交給一個執行緒進行後續處理。執行緒主要

Python開發第十:JavaScript

靜態函數 發生 編寫 小寫 nsh div 區分 所有 是個 JavaScript是一門編程語言,瀏覽器內置了JavaScript語言的解釋器,所以在瀏覽器上按照JavaScript語言的規則編寫相應代碼之,瀏覽器可以解釋並做出相應的處理。 一、如何編寫 1、JavaScr

python全棧開發第十Python常用模塊三(hashlib,configparser,logging)

錯誤 .config lte with open sha 警告 輸入 格式化 pass hashlib模塊 hashlib提供了常見的摘要算法,如md5和sha1等等。 那麽什麽是摘要算法呢?摘要算法又稱為哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換為一個長度固

python全棧開發基礎第二十互斥鎖以及進程之間的三種通信方式(IPC)以及生產者個消費者模型

ipc 例子 清空 ase 多個進程 art 並且 star als 一、互斥鎖 進程之間數據隔離,但是共享一套文件系統,因而可以通過文件來實現進程直接的通信,但問題是必須自己加鎖處理。 註意:加鎖的目的是為了保證多個進程修改同一塊數據時,同一時間只能有一個修改,即串行的修

MySQL數據庫學習第十IDE工具介紹及數據備份

導出 數據庫文件 文本 desc ext 直接 min ble 如果 一、IDE工具介紹 生產環境還是推薦使用mysql命令行,但為了方便我們測試,可以使用IDE工具navicat 二、MySQL數據備份 #1. 物理備份: 直接復制數據庫文件,適用於大型數據庫環境

web前端第十jQuery屬性相關操作

自定義屬性 utf tab 一個 option on() function gpo pan 知識點總結 1、屬性 屬性(如果你的選擇器選出了多個對象,那麽默認只會返回出第一個屬性)、 attr(屬性名|屬性值) - 一個參數是獲取

Django 第十Form組件基礎

實例 ont you 常用 lock 使用 服務 any 現在 一、model常用操作   1、13個API查詢:all,filter,get ,values,values_list,distinct,order_by ,reverse , exclude(排除),cou

Django 第二十中介模型以及優化查詢以及CBV模式

很多 () ... cti lin form 導致 自動創建 簡單 一、中介模型:多對多添加的時候用到中介模型 自己創建的第三張表就屬於是中介模型 class Article(models.Model): ‘‘‘ 文章表 ‘‘‘ ti

Java Spring 框架初步學習總結)簡單實現 IoC 和 AOP

1.0 其中 表示 只需要 第一篇 否則 info fin pojo   Spring 是一個開源的設計層面的輕量級框架,Spring 的好處網上有太多,這裏就不在贅述。   IoC 控制反轉和 AOP 面向切面編程是 Spring 的兩個重要特性。   IoC(Inver

Python開發第二十:Web框架之Django基礎

name line 控制 creat js等 nec serve pan xiaohua 一、 Django簡介 1.web框架簡介 具體介紹Django之前,必須先介紹WEB框架等概念。 web框架: 別人已經設定好的一個web網站模板,你學習它的規則,然後“填空”或“修

kafka、kafka框架介紹(生產者

嗯,菜雞是我,驕傲在敗壞以先,狂心在跌倒之前。所以有什麼說錯的地方,還請大家指出批評! 繼爬蟲之後,kafka的介紹。 該系列文章暫時更新兩篇: 【kafka】一、kafka框架介紹(消費者篇):https://blog.csdn.net/lsr40/article/details/84

python爬蟲:python連線postgresql(

本文記錄一下最近在做的事情,會把思考過程和解決問題的方案寫出來。當然,由於本人技術有限,所以可能並不是最好的方案,還請大家見諒!(黑貓白貓只要抓到老鼠,不就是好喵?~) 前言: 事情是這樣的,有一些文章,我要根據文章內容做分類,具體怎麼分我會單獨開一篇文章來講這件事情,這篇文章的重點不是分類

看這就夠了kubernetes入門命令列操作(例項演示)

寫在前面:網上找了好久終於找到了期盼已久的、一個一眼就能理解的kubernetes“整體全過程”文章。 建議看這篇文章可以結合kubernetes官網(www.kubernetes.io)的Tutorial進行演練,效果很好。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

補充上網路流問題——最大帶權閉合路徑 2018 ACM-ICPC 中國大學生程式設計競賽線上賽 F. Clever King

今天把吉林大學的模板也試了一下,它使用的是所謂的Dinic演算法,比普通的BFS不知道快(高)到哪裡去了 程式碼: #include<iostream> #include<algorithm> #include<cstring> using na

ministory()驗收及總結

一、開始 ministory是從8月1日開始的,記得那個時候是開啟我們6個月英語之旅的第一天,哇,現在想想過的真快,一直以為現在才過了一個月。 ** 二、過程 ** 從開始接觸ministory,其實自己非常感謝春哥、吉瑩姐、小波師姐,他們讓我一步一步的從以前錯

朝花夕拾文章搞懂Android跨程序通訊

前言        只要是面試中高階工程師崗位,Android跨程序通訊就是最受面試官青睞的知識點。Android系統的執行由大量相互獨立的程序相互協助來完成的,所以Android程序間通訊問題,是做好Android開發高階工程師必須要跨過的一道坎。如果您還對這方面的