EF我人直接傻了。
完全不会.jpg
坑这儿周末补吧
C:开个桶,倒出来,sort一下。
#include<bits/stdc++.h>
using namespace std;
int ton[500010];
int val[500010];
int vcnt, n, k;
int main() {
scanf("%d%d", &n, &k);
for(int i=1;i<=n;++i) {
int nval = 0;
scanf("%d", &nval);
ton[nval]++;
}
for(int i=1;i<=n;++i) {
if(ton[i])
val[++vcnt] = ton[i];
}
sort(val + 1, val + vcnt + 1);
int ans = 0;
for(int i = 1; i <= vcnt - k; ++i)
ans += val[i];
cout<<ans;
return 0;
}
D:2n的限制很有意思。
最开始脑补了个东西,但是他WA了。
然后换成了,先让整个数列同号,然后做前缀和/后缀和。
#include<bits/stdc++.h>
using namespace std;
int a[101];
int pos;
int n;
void p(int l, int r) {
printf("%d %d\n", l, r);
return;
}
int main() {
scanf("%d", &n);
for(int i=1;i<=n;++i) {
scanf("%d", &a[i]);
if(abs(a[pos]) < abs(a[i]))
pos = i;
}
if(a[pos] == 0) {
printf("0");
return 0;
}
printf("%d\n", 2 * n - 2);
for(int i=1;i<=n;++i) {
if(i != pos)
p(pos, i);
}
if(a[pos] > 0) {
for(int i=2;i<=n;++i)
p(i-1, i);
}
else {
for(int i=n-1;i>=1;--i)
p(i+1, i);
}
return 0;
}
E这种DP是真的做不动,正解是长链剖分,周末补吧,先坑这儿。
感觉自己好菜。