import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); /** n:物品种类数,每种物品只能购买一个,有的物品支持优惠活动,有的并不支持; k:支付宝余额钱数,支付宝九五折优惠 ai:n个正整数输入物品价格ai表示每个物品的价格 s:一个长度为n 的只含有0 和1 的字符串,表示每个物品是否支持优惠。(如果是1 代表第i 个物品支持优惠,否则不支持) 求仅使用支付宝进行支付的话,最多能买几件物品? */ int n = scanner.nextInt(); long k = scanner.nextLong(); long[]a = new long[n]; for (int i = 0; i < n; i++) { a[i] = scanner.nextLong(); } String s = scanner.next(); // 统一转化单位:支持优惠 → *95;不支持 → *100,扩大100倍 for (int i = 0; i < n; i++) { if (s.charAt(i) == '1') a[i] = a[i] * 95; else a[i] = a[i] * 100; } // 排序 Arrays.sort(a); // 贪心 int count = 0; k = k * 100;//k *=100; // ai已经按价格从小到大排序好了,所以只需要遍历a[i],判断k是否大于ai[i],如果大于则k减去ai[i],count加1,否则结束循环 for (int i = 0; i < n; i++) { if (k >= a[i]) { k -= a[i];//k-=a[i]; count++; } else break; } System.out.println(count); scanner.close(); } }