程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NOIP 2014民間題解

NOIP 2014民間題解

編輯:C++入門知識

NOIP 2014民間題解


Day1

T1

這個題其實就是考你會不會編程。

T2

題目有坑點,說n個點的無向圖上有n-1條邊,很明顯這是棵樹。 因為是樹,所以我們沒必要跑最短路,而且世界上還沒這麼快的最短路算法能A掉這個題。 下面是ydc的思路

考慮距離為2的點對,可以理解為枚舉ii能走到的點集兩兩之間距離為2

我們要做的是對於一個數組a1,a2,a3,…,am,要求aiaj,i≠j的Σ與max

max是個很簡單的事情,你只要求a數組的最大值與次大值即可

至於Σ,我們知道∑i=1n∑j=1naiaj=(∑i=1nai)2,於是容易推出我們要求的就是(∑i=1nai)2?∑i=1na2i

當然你也可以令s=∑i=1nai,求∑i=1nai(s?ai)

復雜度應該是O(n)

還有我的思路:

枚舉樹上的n個點,每個點枚舉他們的孫子節點,統計每個點和其孫子節點的乘積最大值和乘積之和。

按理說每個點只被統計過一次,復雜度應該是O(n),有同學說可能會出現O(n^2)的情況,有個別點TLE的可能

T3

類完全背包問題。有O(nm)的算法,我用O(nm^2)的記憶化搜索方法,預計得分50~70

Day2

T1

還是考你會不會編程,注意題目要求路由器在路口處

T2

根據題意,我們首先建一個反向圖,所有邊和原圖方向相反,在這個圖上跑BFS或者SPFA,得到所有與終點聯通的點,然後預處理篩掉那些不符合題意的點,最後正向跑BFS或SPFA就行了

T3

1、O(nm)算法,就是m次枚舉x,代入方程計算答案,高精度或者用多個大素數取模處理,高精度的話如果高精度位數太長會卡常數T掉很多點,沒辦法我只能開長度200的高精度,取模不存在這個問題,可以卡時得到70分,如果高精度帶壓位也可以拿到70分。 2、策爺的做法:

暴力做法是對[1,m]的所有整數在模意義下驗證,復雜度O(nm)

取一個質數P,對[0,P?1]的整數進行驗證(模P意義下),復雜度是O(Pn)。(注意挑選的P需要保證f(x)在模P意義下不會變成零多項式)

然後可以知道模P意義下有不超過n個解。(拉格朗日定理)

那麼對應地,在[1,m]中至多只有n??m/P?個解,對這些解進行驗證即可。復雜度O(n2m/P)

Pnm???√附近。總復雜度O(nnm???√)


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved