按照题意,先累加所有参与满减的商品价格之和,然后计算他们可以凑成的 300 的次数,这就是可以减去 50 的次数。
再加上不参加满减的商品价格即可。
时间复杂度:O(n)
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
int allp = 0;
int allq = 0;
for (int i = 0; i < n; ++i)
{
int p, q;
cin >> p >> q;
allp += p;
if (q == 1)
{
allq += p;
}
}
int ans = allp - allq / 300 * 50;
cout << ans << "\n";
return 0;
}
n = int(input())
allp = 0
allq = 0
for i in range(n):
p, q = map(int, input().split())
allp += p
if q == 1:
allq += p
ans = allp - allq // 300 * 50
print(ans)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int allp = 0;
int allq = 0;
for (int i = 0; i < n; ++i) {
int p = scanner.nextInt();
int q = scanner.nextInt();
allp += p;
if (q == 1) {
allq += p;
}
}
int ans = allp - allq / 300 * 50;
System.out.println(ans);
}
}
小红来到一家商场购物。
这家商场正在优惠促销,部分商品可以参加每满 300 减 50 的活动。
现在给定你小红购买的每个物品的价格,以及每个物品是否参加满减活动。
你需要告诉小红,在满减后,他实际需要支付的价格。
第一行,一个整数 n(1≤n≤105),表示小红购买的物品数。
接下来n行,每行两个整数,第一个整数 p(1≤p≤104) 表示物品的价格,第二个整数 q(0≤q≤1) 表示该物品是否参加活动,p=1 表示参加,p=0 表示不参加
输入
5
114 0
514 1
998 0
244 1
353 1
输出
2073
说明
参加满减活动的物品的总价格为 514+244+353=1111
每 300 减 50 ,一共可以减 150 ,故最后总价格为 (114+998) + (1111-150)=2073