传送门
题目大意
看式子懂题意系列…
分析
自然想到我们先按比例下取整得到一个值,再按每个人这样分配所产生的值从大到小排序,然后将剩下的几个金币自大到小每人分配一个,代码挺好理解的,详见代码。
代码
#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define li long long #define pb push_back #define mp make_pair #define y1 y12345678909 #define rii register int #define pii pair #define r(x) scanf("%d",&x) #define ck(x) cout<<x<<endl; #define uli unsigned long long #define sp cout<<"---------------------------------------------------"<<endl struct node { int d,no; }a[]; int ans[]; inline bool cmp (const node x,const node y){ return x.d<y.d; } int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); int n,m,i,z,y,all,x; r(n),r(m),r(y); all=m; for(i=;i<=n;i++){ r(x); z=x*m; ans[i]+=z/y; all-=ans[i]; z%=y; a[i].d=z; a[i].no=i; } sort(a+,a+n+,cmp); for(i=n-all+;i<=n;i++) ans[a[i].no]++; for(i=;i<=n;i++) printf("%d ",ans[i]); puts(""); return ; }
手机扫一扫
移动阅读更方便
你可能感兴趣的文章