t1:這是一道規律題,但是我沒有想出來。
首先我們發現所有的家庭一定是繞圈放置時答案才是最優的,由此我們可以手玩幾個小資料來推出規律。
正解的規律是對於乙個正六邊形:我們第一次可以花費1的代價擴充套件它的一條邊,產生k-1個新的格仔(k代表邊長);第二次可以花費1的代價擴充套件它的第二條邊,這時會產生新的k個格仔;以此類推,第
三、第四、第五條邊都是花費1的代價產生k個新的格仔,但是第六條邊時花費1的代價產生k+1個新的格仔。
所以我們首先找到乙個面積不超過n的最大的正六邊形,然後列舉要擴充套件它的幾條邊才能容下n個家庭,這樣就可以算出答案了。
**如下:
#include#include#include#define ll long long
ll n,ans;
int main()
s=s+k-1;ans++;
if(s>=n)
s=s+k;ans++;
if(s>=n)
s=s+k;ans++;
if(s>=n)
s=s+k;ans++;
if(s>=n)
s=s+k;ans++;
if(s>=n)
s=s+k+1;ans++;
if(s>=n)
}
t2:這題我當場就想出正解了,但是還有乙個細節沒有處理好。
首先我們從f[i]想i連邊,邊權為d[f[i]]-c[i],然後我們發現整個圖就是乙個環套樹。接著我們就可以用類似拓撲的方法搞定樹的答案(即選最大的邊乘上a[f[i]])。然後乙個環上一定要刪掉一條邊,那麼我們就選擇刪掉收益最小的那一條邊,然後環就變成了一棵樹,用樹的方法處理就好了。
注意:1、自環的情況。
2、我們其實可以把所有的物品取剩只有1個時再來割環邊,我比賽時就錯了這個地方。
t3:這一題不難,但是考思維。
首先我們列舉p串,這裡注意p串的長度一定要是n的約數,所以列舉的複雜度是o(n*logn)的。
接著我們可以取件dp,一開始設f[i][j][k]表示i~j這乙個區間,去掉所有完整的串之後剩下的幾個部分匹配到p的第k位是否可行。
然後我們又可以發現其實k=(j-i+1)*len(len是p的長度),這個想一想就清楚了。所以現在只剩下i、j兩維。
接著我們就列舉l表示k+1位匹配的位置,這時又注意到l=j+1+x*len(這個想一想也可以知道為什麼),所以l的列舉是o(logn)的。
綜上所述,總的時間複雜度是o(n*logn*n^2*logn)=o(n^3*(logn)^2)。有點大,但是優化一下能過。
NOIP提高組 矩陣
在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...
NOIP提高組2005 過河
過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...
NOIP提高組 20151029模擬
其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...