1 solutions

  • 0
    @ 2025-6-4 16:04:15

    1.先按照a从小到大排序,然后进行糖果分发

    2.将余下的r个糖果分别分给a较小的r的公民

    3.按照编号从小到大依次输出每个公民可以得到的糖果数目

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL; 
    const int N=2e5+10;
    struct Stu{
    	int a;
    	int id;
    	LL num;
    }stu[N];
    bool cmp1(Stu x,Stu y)
    {
    	if(x.a<y.a) return 1;
    	return 0;
    }
    bool cmp2(Stu x,Stu y)
    {
    	if(x.id<y.id) return 1;
    	return 0;
    }
    int main()
    {
      	int n;
      	LL k;
      	cin>>n>>k;
    	int r=k%n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>stu[i].a;
    		stu[i].id=i;
    		stu[i].num=k/n;
    	}
    	sort(stu+1,stu+n+1,cmp1); //按照从a小到大排序
    	for(int i=1;i<=r;i++)
    	{
    		stu[i].num++;
    	} 
    	sort(stu+1,stu+n+1,cmp2);//按照编号从小到大排序
    	for(int i=1;i<=n;i++)
    	{
    		cout<<stu[i].num<<endl;
    	} 
        return 0;
    }
    
    • 1

    【例】[ABC208C] 公平的糖果分发(Fair Candy Distribution)

    Information

    ID
    2619
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    3
    Tags
    # Submissions
    1
    Accepted
    1
    Uploaded By