Codeforces Round #240 (Div. 2) B;http://codeforces.com/problemset/problem/415/B
题意:老板一天发x张代币券,员工能用它来换大洋,用w张代币券可换[a*w/b](下取整)块大洋,代币券只能当天适用,求换最多大洋时最多能留多少代币券
比如a=3,b=7,x=4时,我最多能换3×4/7=1块大洋,但是我显然用3张代币券就能换1块大洋,所以多的1块就应该被保留。
题解:就是找一个w0,使得a*(w-w0)/b最接近a*w/b;推到过程很巧妙,最终的结果就是a*w%b/a,注意用long long.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+;
long long c[N];
int n;
long long a,b;
int main(){
while(~scanf("%d%I64d%I64d",&n,&a,&b)){
for(int i=;i<=n;i++){
scanf("%I64d",&c[i]);
}
for(int i=;i<=n;i++){
if(i==n)printf("%I64d\n",(c[i]*a)%b/a);
else{
printf("%I64d ",(c[i]*a)%b/a);
}
}
}
}