施工中。。。
已知 \(a\times b\times c\) 的四面體,以 \(a\) 為 \(x\) 軸,\(b\) 為 \(y\) 軸, \(c\) 為 \(z\) 軸
以 \(z\) 為軸做切面,為 \(c\times \frac}\) 的三角形
則易知 \(h= \frac}\)
\(\frac=\frac+\frac+\frac\),\(o(n\log n)\) 求 \(\frac\) 的期望即可
比賽時一發過。
#include#define ll long long
#define maxn 6000010
#define mod 998244353
using namespace std;
ll pe[maxn], sum[maxn];
ll po(ll x)
return bas;
}int main()
int t;
scanf("%d", &t);
while (t--)
return 0;
}
手模一下一張紙的情況,多折幾次就基本明白了。
每一次摺紙實際上就是將當前的狀態複製乙份,然後翻轉。
比賽時一發過。
#include using namespace std;
vectorp[12];
void init() ;
for (int i = 1; i <= 10; i++)
}int a[500][2000];
int b[500 * 2000];
int col[2000];
int main()
else
flag ^= true;
} for (int i = 1; i <= 2 * n - 1; i++)
for (int j = 1; j <= (1 << k) - 1; j++)
printf("%d ", b[a[2 * n][j]]);
printf("%d\n", b[a[2 * n][1 << k]]);
} return 0;
}
題意為求乙個樹上的子圖,使得子圖全連通、子圖上度數大於 \(k\) 的點至多為 \(1\) 個、子圖邊權值和最大
我們任取一點為根,做樹形 \(dp\),令 \(dp[i][j]\) 表示
\(dp[i][0]\) 為子樹中最大的 \(k-1\) 個 \(dp[j][0]\)
\(dp[i][1]\) 為所有子樹的 \(dp[j][0]\) 之和或 \(dp[i][0]\) 刪除乙個子樹換成 \(dp[j][1]\)
對於每個 \(i\) 容易由 \(dp[i][0]\) 和 \(dp[i][1]\) 得到以 \(i\) 為根的子圖的最大值,求最值即可
比賽時一發過。
#include using namespace std;
typedef long long ll;
typedef pairpii;
typedef pairpll;
const int maxn = 2e5 + 5;
ll dp[maxn][2];
vectore[maxn];
int main()
if (k == 0)
ll ans = 0;
functiondfs;
dfs = [&](int now, int fa)
ll ansl = 0, ansr = 0;
sort(a.begin() + 1, a.begin() + 1 + g,
(const pll& a, const pll& b) );
for (int i = 1; i <= min(k - 1, g); i++)
dp[now][0] += a[i].first;
if (g >= k)
ansl = dp[now][0] + a[k].first;
else
ansl = dp[now][0];
ans = max(ans, ansl);
for (int i = 1; i <= g; i++)
dp[now][1] += a[i].first;
ansr = dp[now][1];
for (int i = 1; i <= min(k - 1, g); i++)
dp[now][1] =
max(dp[now][1], dp[now][0] - a[i].first + a[i].second);
for (int i = k; i <= g && (k - 1 > 0); i++)
dp[now][1] =
max(dp[now][1], dp[now][0] - a[k - 1].first + a[i].second);
for (int i = 1; i <= min(k, g); i++)
ansr = max(ansr, ansl - a[i].first + a[i].second);
for (int i = k + 1; i <= g && (k > 0); i++)
ansr = max(ansr, ansl - a[k].first + a[i].second);
ans = max(ans, ansr);
};dfs(1, 0);
printf("%lld\n", ans);
} return 0;
}
該題為 \(1012\) 的變式,由於 \(n\leq 5000\),所以可以用 \(o(n^2)\) 的 \(dp\) 解決。
\(dp[i]\) 表示倒數第 \(i\) 個存活的機率,首先要計算最後剩餘數,將其 \(dp\) 值賦為 \(1\) 。
然後加入人數,直到 \(n\) 個人。如果這個數不是一定被取出,就做更新一次 \(dp\),否則 \(dp[i]=0\) 。
\[\begindp[i]=dp[i]\times \frac+dp[i-1]\times \frac,j 為當前數字全部數量\end
\]比賽時對剩餘人數處理和題目表達的方式有出入,導致wa1,理清處理方法後就過了。
#include#define ll long long
#define maxn 100010
#define mod 998244353
using namespace std;
ll inv[maxn], ans[maxn];
ll qpow(ll x, ll y)
return bas;
}ll po(ll x)
return bas;
}int main()
int t;
scanf("%d", &t);
while (t--)
for (int i = res; i < n; i++)
else
}} for (int i = n - 1; i > 0; i--) printf("%lld ", ans[i]);
printf("%lld\n", ans[0]);
} return 0;
}
純粹找規律(大霧)
期望為\(1+2^n+(3^n)/(2^)\)
比賽時一發過。
#include#define ll long long
#define maxn 1000010
#define mod 998244353
using namespace std;
ll qpow(ll x, ll y)
return bas;
}ll po(ll x)
return bas;
}int main()
ll ans = qpow(2, n) + 1;
ans %= mod;
ans = ans + qpow(3, n) * po(qpow(2, n - 1)) % mod;
ans %= mod;
printf("%lld\n", ans);
} return 0;
}
由 \(1008\) 的 \(dp\) 式可以得到正解,但 \(o(n^2)\) 的 \(dp\) 會 \(\text\),所以找找規律。不難得出規律:
\[\begin對於任意乙個合法的n,前 \lfloor \frac \rfloor 個數都是 0 \\dp[\frac]=\frac}} \\dp[i+1]=dp[i]\times \frac+i}\ (i
比賽時一發過。
#include#define ll long long
#define maxn 1000010
#define mod 998244353
using namespace std;
ll qpow(ll x, ll y)
return bas;
}ll po(ll x)
return bas;
}int main()
for (int i = 1; i <= n / 2; i++) printf("0 ");
ll ans = po(qpow(2, n / 2));
printf("%lld ", ans);
for (int i = 1; i < n / 2; i++)
printf("%lld\n", ans);
} return 0;
}
2019杭電多校第五場
有兩個題隊友補的,先安利一波 1005 permutation 1 hdu 6628 題意 給你乙個n和k,求n的全排列中,相鄰兩數的差值的陣列字典序第k小的排列 思路 其實就是兩個字,暴力.字典序第k小,k的範圍是n!跟10000取min,8!40320,是第乙個大於10000的數,所以當n小於等...
20190805杭電多校第五場
1004 equation 做法很簡單,寫起來容易混。首先想到去絕對值。因為滿足a 0,顯然當x增大時ax b的值也在增大,所以可以對所有 a,b 按 顯然存在n 1個區間,每個區間都可以將式子分為兩部分,前半部分均為 ax b,後半部分均為ax b。區間依次為 預處理a和b的負的字首和與正的字尾和...
2019杭電多校第五場補題
1001 fraction bx a mod p 可以轉換為 bx kp a.因為a的範圍是 0,b 則列出不等式 又因為1p x b k p x 1 frac frac frac xp k b x 1p 據說是乙個經典問題 給你a,b,c,d,求最簡分式x y frac yx 滿足a b x y ...