3 6CF1114比賽補題

2021-09-12 02:52:25 字數 1449 閱讀 4960

b 排序+貪心

首先想到,選擇的mk個數字一定是最大的,因為無論如何分組,總有區間是包含前mk大的數字的。

然後是分組,分組的情況不是唯一的(開始的時候分組一直和樣例不一樣,改了好多次)後來發現分組可以不一樣qaq

#include#include#include#include#include#include#include#includeusing namespace std;

struct node

a[200100];

int n,m,k;

long long sum;

bool cmp1(node k,node l)

bool cmp2(node k,node l)

int main()

sort(a,a + n,cmp1);

sum = 0;

for(int i = 0;i < m * k; ++i) sum += a[i].s;

printf("%lld\n",sum);

sort(a,a + m * k,cmp2);

int t = m - 1;

for(int i = 1;i < k - 1; ++i)

printf("%d\n",a[t].num);

return 0;

}

c 數學 最大質因子

之前做過乙個十進位制下求l到r中有多少個0的題,當時是考慮到10 = 2 * 5,所以必須要有1個5 和乙個 2 才會有1個0,因為l到r 中2 肯定比 5 多,就是看l 到 r裡面的數字i,裡面含有多少個數字5

那麼這個題呢,把10 換成了b ,其實也一樣,只要分解質因數b = p1 ^a1* p2^a1 * p3 ^a3…*pn ^an,找到n!裡面p1、p2、… pn裡面出現的次數c1 c2 c3…cn

0的個數就是min(c1/a1,c2/a2,…,cn/an)

d 區間dp

(1)將[i…j]染成i處的顏色或者j處的顏色所用次數最少

(2)如果a[i] 與 a[i + 1] 顏色相等,dp[i][j] 可以由 dp[i + 1][j] 得到,a[j]與a[j - 1]相等同理

(3)如果a[i] == a[j], f[i][j] 可以由 f[i + 1][j - 1] + 1 得到

(4)以上都不滿足,f[i][j] 可以由 f[i + 1][j] + 1 或 f[i][j - 1] 得到

#include#include#include#include#include#include#include#includeusing namespace std;

int a[5010];

int f[5010][5010];

int n;

int main()

}printf("%d\n",f[1][n]);

return 0;

}