用盧卡斯定理可知滿足條件即將\(n\)和\(m\)分別用\(k\)進製表示,要求\(n\)的每一位都要大於等於\(m\)的對應位。直接數字\(dp\),設\(f_\)表示處理到第\(i\)位,\(n\)是否觸上界,\(m\)是否觸上界時的方案數。複雜度\(o(t\log_kn)\) 。
#include#include#includeusing namespace std;
#define ll long long
const ll mod = 1000000007;
int t,k,l,a[100],b[100];ll n,m,f[100][4];
int main()
printf("%lld\n",(all-f[l][3]+mod)%mod);
} return 0;
}
看見平均值自然可以想到分數規劃。題目中所給的\(k\)可以減到每條邊的權值裡面去,這樣問題就變成了找一條路徑使其平均值的絕對值最小。
先點分,對於每個分治重心做一次二分。假設組成答案路徑的是\((a,b),(c,d)\)這兩個二元組,其中\(a,c\)代表兩條到根路徑的權值和,\(b,d\)代表長度。二分\(-k<\frac,只需要判斷是否存在滿足條件的二元組即可。
先假設\(a+c\ge0\),那麼就只需要滿足\(\frac這個條件,即\(kb-a>c-kd\)。按\(a\)從小到大列舉\((a,b)(a\ge0)\),加入所有使\(a+c\ge0\)的\((c,d)\),維護\(c-kd\)的最小值即可。考慮到\((a,b),(c,d)\)不能來自於分治重心的同一棵子樹,故需要維護來自不同子樹的最小及次小值。
\(a+c<0\)同理,可得\(a+kb>-c-kd\),故維護\(-c-kd\)的最小值即可。
這樣複雜度為\(o(n\log^2n)\)。
#include#include#includeusing namespace std;
#define ll long long
#define pi pair#define mk make_pair
const int n = 50005;
int n,to[n<<1],nxt[n<<1],head[n],cnt,sz[n],w[n],vis[n],root,sum,top,pos;
ll ww[n<<1],ans=1ll<<60;
struct data
data(ll _x,ll _y,ll _z)
bool operator < (const data &b) const
return false;
}bool chk2(ll k)
return false;
}void solve(int u)
for (int e=head[u];e;e=nxt[e])
if (!vis[to[e]])
}int main(){
freopen("soda.in","r",stdin);
freopen("soda.out","w",stdout);
ll k;scanf("%d%lld",&n,&k);
for (int i=1;i咕咕咕
北京集訓隊2016 Day4 超級跳
問題描述 小h最近迷上了一款叫做 超級跳 的休閒遊戲。遊戲中,有n層雲朵。你控制乙個小人,出生在第n層雲朵上,目標是不斷向下跳,最終抵達地面。為了方便,這裡對遊戲做一些簡化。如果建立平面座標系,可以將每層雲朵抽象成一條平行於x軸的線段。第i層雲朵可以抽象成一條縱座標等於i,左右端點的橫座標分別是li...
清華集訓2016 汽水
試題描述 牛牛來到了乙個盛產汽水的國度旅行。這個國度的地圖上有n個城市,這些城市之間用 n 1 條道路連線,任意兩個城市之間,都存在一條路徑連線。這些城市生產的汽水有許多不同的風味,在經過道路 i 時,牛牛會喝掉 wi 的汽水。牛牛非常喜歡喝汽水,但過量地用汽水是有害健康的,因此,他希望在他旅行的這...
清華集訓2016 資料互動
題目描述 乙個簡單的網路系統可以被描述成一棵無根樹。每個節點為乙個伺服器。連線伺服器與伺服器的資料 線則看做一 條樹邊。兩個伺服器進行資料互動時,資料會經過連線這兩個伺服器的路徑上的所有服務 器 包括這兩個伺服器 自身 每個資料互動請求都有乙個非負的重要度,越重要的請求顯然需要得 到越高的優先處理權...