UESTC 1018 王之新学期 贪心法

ProLightsfx 2017-5-22 125 5/22

王之新学期 贪心法

My Solution

关键是对奇偶讨论,中间位置,  以及迭代停止的位置,和额外讨论的地方
贪心策略:从两边开始历遍,把多余的任务往里移。
然后,偶则特殊处理中间两位,奇则只注意中间位置的数组下标(中间一个不用遍历到)及停下的时候的状态。
且如果n%2==0,则sum必须为偶。先行判断这个,如果不符合则直接输出-1,只有这个时候是-1,然后下面对于n%2==0,就一定存在了。
#include 
#include 
#include 
#include 
//#define LOCAL
const int maxn=10000+5;
int hz[maxn];
using namespace std;

int main()
{
    #ifdef LOCAL
    freopen("a.txt","r",stdin);
    #endif // LOCAL
    int T,n,sum,cot,tem;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        memset(hz,0,sizeof(hz));sum=0;cot=0;
        for(int i=0;i<n;i++){
            scanf("%d",&hz[i]);
            sum+=hz[i];
        }
        if(n%2==0&&sum%2!=0) printf("-1");
        else{
            if(n%2==0){
                for(int i=0;i<(n/2-1);i++){    //最后一步不能再这么移了,中间,看看是不是和为偶数
                    cot+=abs(hz[i]-hz[n-i-1]);//cout<<hz[i]<<" "; if(hz[i]>=hz[n-i-1]) hz[i+1]+=hz[i]-hz[n-i-1];
                    else hz[n-i-1-1]+=hz[n-i-1]-hz[i];
                }
                tem=hz[n/2-1]+hz[n/2];cout<<cot+abs(tem/2-hz[n/2]);//如n=4,0 1 2 3 用下面的会输出0,n=2,0 2也是输出0;
                //printf("%d",cot+abs(tem/2-hz[n/2]));//<<cot+abs(tem/2-hz[n/2])不能用printf()输出,有类型的错误转化
                //arning: format '%d' expects argument of type 'int', 
                //but argument 2 has type '__gnu_cxx::__enable_if<true, double>::__type {aka double}' [-Wformat=]
            }
            else{
                for(int i=0;i<(n-1)/2;i++){ cot+=abs(hz[i]-hz[n-i-1]); if(hz[i]>=hz[n-i-1]) hz[i+1]+=hz[i]-hz[n-i-1];
                    else hz[n-i-1-1]+=hz[n-i-1]-hz[i];
                }
                printf("%d",cot);
            }
        }
        if(T) printf("n");
    }
    return 0;
}


非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

- THE END -
Tag:

ProLightsfx

11月15日14:20

最后修改:2024年11月15日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论