uvalive5986(贪心)
生活随笔
收集整理的這篇文章主要介紹了
uvalive5986(贪心)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
n個人,每兩個人要比一次賽,贏了得一分,輸了不得分,給出一種比完賽之后每個人的分數(shù),你可以給一個人加上一些分,或者減去一些分,使得分數(shù)序列合法,求最小花費(加一分或者減一分花費就是1)。
思路:
給分數(shù)序列從小到大排序,只考慮前i個人是否合法,前i個人的總分應(yīng)該是tmpfen=(i-1)*i/2,如果總分大于tmpfen,那么我們不做修改,如果小于,我們就給第i個人加上差值,最后邊界要處理一下,就ok了。
代碼:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<cstdlib> #include<cmath>using namespace std;int num[100];int main() {int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&num[i]);sort(num+1,num+1+n);int ans=0;int tmpsum=0;for(int i=1;i<n;i++){int tmpfen=(i-1)*i/2;tmpsum+=num[i];if(tmpsum<tmpfen){ans+=(tmpfen-tmpsum);tmpsum=tmpfen;}}int tmpfen=(n-1)*n/2;tmpsum+=num[n];if(tmpsum<tmpfen)ans+=(tmpfen-tmpsum);else if(tmpsum>tmpfen);ans+=(tmpsum-tmpfen);printf("%d\n",ans);} return 0; }總結(jié)
以上是生活随笔為你收集整理的uvalive5986(贪心)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uva5984(简单计算几何)
- 下一篇: uvalive5989(水题)