1 solutions
-
0
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
Information
- ID
- 2619
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 1
- Accepted
- 1
- Uploaded By