kmjp's blog

競技プログラミング参加記です

Codeforces #322 Div2 C. Developing Skills

ABCDF解いたと思ったらしょうもないミスでFを落とした。
http://codeforces.com/contest/581/problem/C

問題

プレイヤーは全部でN個のスキルを持ち、各能力値はA[i]である。
各能力値は0~100の値を持ち、その値を10で割って小数点以下を切り捨てた値の総和がプレイヤーのレートとなる。

プレイヤーは各スキルの能力値を合計Kだけ上昇できるとき、最大レートはどこまで上がるか。

解法

当然低い能力上昇値でレートを1上げられるなら、そちらを先に上げるのが良い。
よって(10-A[i]%10)の小さい順にそれぞれレートが1上昇するまで能力を上げていく。
あとはそれぞれ最大値100を超えない範囲で10ずつ上げていけば良い。

int N,K;
int A[101010];
ll sum;
int num[10];
vector<int> V;

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>N>>K;
	
	int left=0;
	FOR(i,N) {
		cin>>A[i];
		sum += A[i]/10;
		if(A[i]%10) V.push_back(10-A[i]%10);
		left+=10-(A[i]+9)/10;
	}
	
	sort(ALL(V));
	FORR(r,V) {
		if(K>=r) {
			sum++;
			K-=r;
		}
	}
	sum += min(left,K/10);
	cout<<sum<<endl;
	
}

まとめ

意外とsystestで落ちてる人がいた。