7-6 促销收费(2008慈溪)
元旦快到了,各个商场都开始策划大规模的促销活动。慈溪国际购物中心计划推出“满300减120、满500减240”的活动,也就是顾客购买物品的总金额中每300元可以优惠120元,每500元优惠240元,上不封顶。为此,商场收费系统需要进行升级。请你帮助慈溪国际购物中心设计其中的一段程序,输入顾客购买物品的总金额后,即输出优惠后的付款总数。注意,一定要按最优惠的方法计算哦!
输入格式:
只有一行,是顾客购买各种物品的总金额N。(N保证为整数,且N≤2000000000)
输出格式:
只有一行,即优惠后的付款额。
输入样例:
310
输出样例:
190
签到题 分类讨论即可
很容易发现方案是单调的一次函数,
如果有600块钱当然选择第二种方案更优
很容易发现 嫩选方案二尽量选方案二,知道不能选了才看看能不能选方案一
#ifdef debug
#include <time.h>
#include "/home/majiao/mb.h"
#endif
#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <math.h>
#define MAXN ((int)1e5+7)
#define int long long int
#define INF (0x7f7f7f7f)
#define fori(lef, rig) for(int i=lef; i<=rig; i++)
#define forj(lef, rig) for(int j=lef; j<=rig; j++)
#define fork(lef, rig) for(int k=lef; k<=rig; k++)
#define QAQ (0)
using namespace std;
#ifdef debug
#define show(x...) \
do { \
cout << "\033[31;1m " << #x << " -> "; \
err(x); \
} while (0)
void err() { cout << "\033[39;0m" << endl; }
template<typename T, typename... A>
void err(T a, A... x) { cout << a << ' '; err(x...); }
#endif
#ifndef debug
namespace FIO {
template <typename T>
void read(T& x) {
int f = 1; x = 0;
char ch = getchar();
while (ch < '0' || ch > '9')
{ if (ch == '-') f = -1; ch = getchar(); }
while (ch >= '0' && ch <= '9')
{ x = x * 10 + ch - '0'; ch = getchar(); }
x *= f;
}
};
using namespace FIO;
#endif
int n, m, Q, K;
signed main() {
#ifdef debug
freopen("test", "r", stdin);
clock_t stime = clock();
#endif
scanf("%lld ", &n);
#if 0
for(int i=100000; i<=10000000; i++) {
int tmax = 0, cntA = 0, cntB = 0;
for(int k=0; k<=i/300; k++) {
int A = k, B = (i-300*k) / 500;
int tsum = 120 * A + 240 * B;
if(tmax < tsum) {
cntA = A, cntB = B;
tmax = tsum;
}
}
show(i, tmax, cntA, cntB);
}
#else
int ans = 0, tmp = n;
if(n < 300)
printf("%lld\n", n);
else if(n >= 300 && n < 500) {
printf("%lld\n", n-120);
} else {
ans += n/500 * 240;
n %= 500;
if(n >= 300) ans += 120;
printf("%lld\n", tmp-ans);
}
#endif
#ifdef debug
clock_t etime = clock();
printf("rum time: %lf 秒\n",(double) (etime-stime)/CLOCKS_PER_SEC);
#endif
return 0;
}