結果

提出番号 2219
提出者 ndifix
言語 C++
提出日時 2019-03-18 11:43:46
問題名 (18)おまんじゅうわけわけ
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 2ms 7872KB
2 AC 100% 1ms 8608KB
3 AC 100% 2ms 8208KB
4 AC 100% 83ms 8080KB
5 AC 100% 78ms 8096KB
6 AC 100% 84ms 8480KB
7 AC 100% 70ms 8528KB
8 AC 100% 84ms 8528KB
9 AC 100% 247ms 8480KB

ソースコード

#include <bits/stdc++.h>
#define inf 1000000000 //1E+9
#define mod 1000000007
using namespace std;

int main(){
	int n;cin>>n;
	int a[n];for(int i=0;i<n;i++)cin>>a[i];
	vector<int> one,two;
	int ans=0;
	for(int i=0;i<n;i++){
		if(a[i]%3==0)ans+=a[i];
		if(a[i]%3==1)one.push_back(a[i]);
		if(a[i]%3==2)two.push_back(a[i]);
	}
	sort(one.rbegin(),one.rend()); sort(two.rbegin(),two.rend());
	while(one.size()>=3 && two.size()>=3){
		ans+=one[0]+one[1]+one[2]+two[0]+two[1]+two[2];
		one.erase(one.begin(),one.begin()+3);
		two.erase(two.begin(),two.begin()+3);
	}
	while(one.size()>=two.size()+3){
		ans+=one[0]+one[1]+one[2];
		one.erase(one.begin(),one.begin()+3);
	}
	while(two.size()>=one.size()+3){
		ans+=two[0]+two[1]+two[2];
		two.erase(two.begin(),two.begin()+3);
	}

	int buf=0; for(int i=0;i<min(one.size(),two.size());i++)buf+=one[i]+two[i];
	if(one.size()>=3)ans+=max(one[0]+one[1]+one[2],buf);
	else if(two.size()>=3)ans+=max(two[0]+two[1]+two[2],buf);
	else ans+=buf;

	if(ans==0)cout<<"-1"<<endl;
	else cout<<ans<<endl;
	return 0;
}