P1031 [NOIP2002 提高组] 均分纸牌 20分求调
查看原帖
P1031 [NOIP2002 提高组] 均分纸牌 20分求调
383293
ljs150楼主2022/10/7 22:42
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int in_need[1000],help[1000],in_neednum=0,helpnum=0,num=0,d=1,j=1,k,changenum=0;
	int firsthand[1000],total=0,mid=0;
    scanf("%d",&num);
    for(int i=1;i<=num;i++)
    {
        scanf("%d",firsthand[i]);
        total+=firsthand[i];
    }
    mid=total/num;
    for(int i=1;i<=num;i++)
    {
        if(firsthand[i]<mid)
        {
            in_neednum++;
        }
        in_need[i]=firsthand[i];
        if(firsthand[i]>mid)
        {
            helpnum++;
        }
        help[i]=firsthand[i];
    }
    while(k==0)
    {
        if(in_need[d]<help[j])
        {
            in_need[d]=0;
            help[j]-=in_need[d];
            d++;
            changenum++;
        }
        if(in_need[d]==help[j])
        {
            if(j==helpnum)
            {
                k++;
            }
            in_need[d]=0;
            help[j]=0;
            d++;
            j++;
            changenum++;
        }
        if(in_need[d]>help[j])
        {
            help[j]=0;
            in_need[d]-=help[j];
            j++;
            changenum++;
        }
    }
    printf("%d",changenum);
    return 0;
}
2022/10/7 22:42
加载中...