abc E求调
  • 板块学术版
  • 楼主sky_0x006
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/16 23:11
  • 上次更新2024/3/16 23:18:06
查看原帖
abc E求调
825958
sky_0x006楼主2024/3/16 23:11
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, k;
ll a[1000015], b[1000015];
ll c[1000015], d[1000015];
ll q[1000015], num[1000015];
ll m[1000015];
ll cnt;
struct sss {
	ll vol, to;
} aa[1000015];
bool cmp(sss a, sss b) {
	return a.vol<b.vol;
}
ll aaa[1000015];
ll s;
ll answer;
ll asdf;
int main() {
	cin>>n>>k;
	for(ll i=1; i<=n; i++)	{
		cin>>a[i]>>b[i];
		if(a[i]==a[i-1]) {
			d[cnt]=i;
			num[cnt]+=b[i];
			m[cnt]=max(m[cnt],b[i]);
			q[cnt]=num[cnt]-m[cnt];
		} else {
			cnt++;
			c[cnt]=d[cnt]=i;
			m[cnt]=b[i];
			num[cnt]+=b[i];
		}
	}
	if(n-cnt>k) {
		cout<<"-1";
		return 0;
	} else {
		for(ll i=1; i<=cnt; i++) {
			for(ll j=c[i]; j<=d[i]; j++) {
				if(b[j]==m[i]) {
					s++;
					aa[s].vol=b[j];
					aa[s].to=s;
					aaa[s]=a[j];
					answer+=b[j];
//					cout<<"sdf "<<a[j]<<" "<<b[j]<<'\n';
					break;
				}
			}
		}
		sort(aa+1, aa+s+1, cmp);
//		for(ll i=1; i<=s; i++) cout<<aa[i].vol<<" "<<aa[i].to<<'\n';
//		cout<<"sdfsdfsd "<<asdf<<" "<<k-(n-cnt)<<'\n';
		for(ll i=1; asdf<=k-(n-cnt)-1 and i<=s; i++) {
//			cout<<"i: "<<i<<" "<<aa[i].to-1<<" "<<aa[i].to+1<<" "<<aaa[aa[i].to-1]<<" "<<aaa[aa[i].to+1]<<'\n';
			if(aaa[aa[i].to-1]!=aaa[aa[i].to+1]) answer-=aa[i].vol, asdf++;
		}
//		cout<<"sdfsdfsd s "<<asdf<<" "<<k-(n-cnt)<<'\n';
		if(asdf!=k-(n-cnt)) cout<<"-1";
		else cout<<answer;
	}
	return 0;
}

自己造的样例都过了,就是WA了三个点QDQ,谢谢大佬们

2024/3/16 23:11
加载中...