其他分享
首页 > 其他分享> > ARC086简要题解(只有两题

ARC086简要题解(只有两题

作者:互联网

在这里插入图片描述
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是真的做不动,正解是长链剖分,周末补吧,先坑这儿。
感觉自己好菜。

标签:简要,return,val,int,题解,scanf,pos,ton,ARC086
来源: https://blog.csdn.net/weixin_43977362/article/details/118711340