萌新求助,吐了
查看原帖
萌新求助,吐了
380042
piggy123楼主2022/1/5 17:58
#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll x[105],app[105],leave;
bool vis[105];

int main(){
	ll k,n,ans=0;
	cin >> k >> n;
	leave=k;
	for (ll i=0;i<n;i++){
		cin >> x[i];
	}
	for (ll i=0;i<n;i++){
		if (vis[x[i]]){ // 如果已经有了就直接榨汁 
			continue;
		}else if (leave){ // 否则取一个空的 
			leave--;
			vis[x[i]]=1;
		}else{ // 否则取这个点之后最早出现时间最晚的一种果汁替换掉(必须要存在) 
			ll tgt=114514;
			memset(app,0x3f,sizeof(app));
			for (ll j=i+1;j<n;j++){
				app[x[j]]=min(app[x[j]],j);
			}
			for (ll j=0;j<n;j++){
				if (tgt==114514||(app[tgt]<app[x[j]]&&vis[x[j]])){
					tgt=x[j];
				}
			}
			if (tgt==114514){
				for (ll j=0;j<n;j++)
					if (vis[x[j]]){
						tgt=x[j];
						break;
					}
			}
//			cout <<i<<" "<< tgt<< endl<< endl;
			vis[tgt]=0;
			ans++;
			vis[x[i]]=1;
		}
	}
	cout << ans << endl;
	return 0;
}

没有发现错误,只有40分

2022/1/5 17:58
加载中...