出差=倒贴

明天又要去东莞,真是郁闷!其实出差到算不了什么,反正都没有在家,到那里都是样的,但出一次倒贴一次的差谁会想去呀?妈的,还什么合资企业,比国内的私人老板还扣!本来一天还有80的补助,但上周给我个通知,说是我要负责惠阳(惠州)和东莞两个项目,这是属于现阶段的工作工作范围,不能已出差计算.我操!你到会算!现在物价那么高,出去吃饭那么贵,一个月怎样多跑几趟,估计工资全给倒贴进去了!

希望这样的日子快快过去吧!早日回到宜宾,回到我的家!

可以使用哈希表来实现,将优惠券的面值和商品的价值作为键,将是否使用过作为值。遍历每个优惠券和商品,如果该优惠券和商品都没有使用过,则将其标记为已使用,并将对应的回报值加到总回报中。如果该优惠券和商品中有一个已经使用过了,则将需要倒贴的费用加到总回报中。以下是一段C语言代码示例: ```c #define HASH_SIZE 20007 typedef struct HashNode { int key; int value; UT_hash_handle hh; } HashNode; int total_profit = 0; HashNode *hash_table = NULL; // 将面值和价值组合成哈希表的键值 int hash_key(int coupon_value, int goods_value) { return coupon_value * 101 + goods_value + 100; } // 判断该优惠券和商品是否已经使用过 int is_used(int coupon_value, int goods_value) { int key = hash_key(coupon_value, goods_value); HashNode *node; HASH_FIND_INT(hash_table, &key, node); return node ? node->value : 0; } // 将该优惠券和商品标记为已使用 void mark_used(int coupon_value, int goods_value) { int key = hash_key(coupon_value, goods_value); HashNode *node; HASH_FIND_INT(hash_table, &key, node); if (!node) { node = (HashNode*)malloc(sizeof(HashNode)); node->key = key; node->value = 1; HASH_ADD_INT(hash_table, key, node); } } // 计算回报值 void calculate_profit(int coupon_value, int goods_value, int profit) { if (!is_used(coupon_value, goods_value)) { total_profit += profit; mark_used(coupon_value, goods_value); } else { int cost = (coupon_value > 0 ? coupon_value : -goods_value); total_profit -= cost; } } // 遍历优惠券和商品,计算总回报 for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { int coupon_value = coupons[i].value; int goods_value = goods[j].value; int profit = coupons[i].profit * goods[j].profit; calculate_profit(coupon_value, goods_value, profit); } } ``` 这样的时间复杂度为O(NM),无法达到O(N+M)的时间复杂度,但是可以应对这个数据范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值