Cleaning the Phone

2024-01-04 08:38
文章标签 phone cleaning

本文主要是介绍Cleaning the Phone,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:
Polycarp often uses his smartphone. He has already installed n applications on it. Application with number i takes up ai units of memory.

Polycarp wants to free at least m units of memory (by removing some applications).

Of course, some applications are more important to Polycarp than others. He came up with the following scoring system — he assigned an integer bi to each application:

bi=1 — regular application;
bi=2 — important application.
According to this rating system, his phone has b1+b2+…+bn convenience points.

Polycarp believes that if he removes applications with numbers i1,i2,…,ik, then he will free ai1+ai2+…+aik units of memory and lose bi1+bi2+…+bik convenience points.

For example, if n=5, m=7, a=[5,3,2,1,4], b=[2,1,1,2,1], then Polycarp can uninstall the following application sets (not all options are listed below):

applications with numbers 1,4 and 5. In this case, it will free a1+a4+a5=10 units of memory and lose b1+b4+b5=5 convenience points;
applications with numbers 1 and 3. In this case, it will free a1+a3=7 units of memory and lose b1+b3=3 convenience points.
applications with numbers 2 and 5. In this case, it will free a2+a5=7 memory units and lose b2+b5=2 convenience points.
Help Polycarp, choose a set of applications, such that if removing them will free at least m units of memory and lose the minimum number of convenience points, or indicate that such a set does not exist.

Input
The first line contains one integer t (1≤t≤104) — the number of test cases. Then t test cases follow.

The first line of each test case contains two integers n and m (1≤n≤2⋅105, 1≤m≤109) — the number of applications on Polycarp’s phone and the number of memory units to be freed.

The second line of each test case contains n integers a1,a2,…,an (1≤ai≤109) — the number of memory units used by applications.

The third line of each test case contains n integers b1,b2,…,bn (1≤bi≤2) — the convenience points of each application.

It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.

Output
For each test case, output on a separate line:

-1, if there is no set of applications, removing which will free at least m units of memory;
the minimum number of convenience points that Polycarp will lose if such a set exists.
Example
inputCopy
5
5 7
5 3 2 1 4
2 1 1 2 1
1 3
2
1
5 10
2 3 2 3 2
1 2 1 2 1
4 10
5 1 3 4
1 2 1 2
4 5
3 2 1 2
2 1 2 1
outputCopy
2
-1
6
4
3
Note
In the first test case, it is optimal to remove applications with numbers 2 and 5, freeing 7 units of memory. b2+b5=2.

In the second test case, by removing the only application, Polycarp will be able to clear only 2 of memory units out of the 3 needed.

In the third test case, it is optimal to remove applications with numbers 1, 2, 3 and 4, freeing 10 units of memory. b1+b2+b3+b4=6.

In the fourth test case, it is optimal to remove applications with numbers 1, 3 and 4, freeing 12 units of memory. b1+b3+b4=4.

In the fifth test case, it is optimal to remove applications with numbers 1 and 2, freeing 5 units of memory. b1+b2=3.

题解:

#include<iostream>
#include<sstream>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<stack>
#include <utility>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<time.h>
int INF=0x3f3f3f3f;
using namespace std;
long long a[200005],b[200005],a1[200005],a2[200005];
int main()
{int t;cin>>t;while(t--){memset(a1,0,sizeof a1);memset(a2,0,sizeof a2);long long n,m; scanf("%lld %lld",&n,&m);long long num=0;for(long long i=1;i<=n;i++){scanf("%lld",&a[i]);num+=a[i];}for(long long i=1;i<=n;i++) scanf("%lld",&b[i]);if(num<m){cout<<-1<<endl;continue;}long long s1=1,s2=1;for(int i=1;i<=n;i++){if(b[i]==1) a1[s1]=a[i],s1++;if(b[i]==2) a2[s2]=a[i],s2++;}sort(a1+1,a1+1+s1);sort(a2+1,a2+1+s2);long long sum=0;for (long long i=1;i<=s1;i++) sum+=a1[i];long long j=s2,i=0;long long ans=INF;while(i<=s1){while(j>=1&&sum<m){sum+=a2[j--];}if(sum>=m){ans=min(s1-i+2*(s2-j),ans);}sum-=a1[++i];}cout<<ans<<endl;}
}

这篇关于Cleaning the Phone的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/568752

相关文章

cell phone teardown 手机拆卸

tweezer 镊子 screwdriver 螺丝刀 opening tool 开口工具 repair 修理 battery 电池 rear panel 后盖 front and rear cameras 前后摄像头 volume button board 音量键线路板 headphone jack 耳机孔 a cracked screen 破裂屏 otherwise non-functiona

MiniCPM-V: A GPT-4V Level MLLM on Your Phone

MiniCPM-V: A GPT-4V Level MLLM on Your Phone 研究背景和动机 现有的MLLM通常需要大量的参数和计算资源,限制了其在实际应用中的范围。大部分MLLM需要部署在高性能云服务器上,这种高成本和高能耗的特点,阻碍了其在移动设备、离线和隐私保护场景中的应用。 文章主要贡献: 提出了MiniCPM-V系列模型,能在移动端设备上部署的MLLM。 性能优越:

LeetCode 17 Letter Combinations of a Phone Number

题意: 给出数字串s,输出按照9键键盘输入s时可能的所有字符串。 思路: 没思路……直接模拟过程就得了…… 写switch好看点……吧…… 代码: class Solution {public:vector<string> letterCombinations(string digits) {vector<string> res;if(!digits.size()){

1016. Phone Bills (25) 模拟(就是很繁琐 尤其是计算费用)

1016. Phone Bills (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A long-distance telephone company charges its customers by the following rules:

Phone Number 2010年山东省第一届ACM大学生程序设计竞赛

Phone Number Time Limit: 1000MS Memory limit: 65536K 题目描述 We know that if a phone number A is another phone number B’s prefix, B is not able to be called. For an example, A is 123 while

LeetCode:Letter Combinations of a Phone Number

题目链接:https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/ 项目源码:https://github.com/haha174/daylx Given a string containing digits from 2-9 inclusive, return all possible l

URAL 1002. Phone Numbers

题意就是,已知一串数字,按照题目给的对应表,转换成字母之后,能否由给定的单词组成。要求 输出单词数最小的任意一组答案,或输出无解。 用的DP。 dp[ i ]表示以前i个字母可以组成的最少单词数量。 最后dp [ 总字符数量 ] 就是最少单词个数。 再根据path[ i ] 记录的路径,返回去输出每个单词。 具体见代码: #define K2(a,b,t) case a:c

[POJ 2376] Cleaning Shifts (区间贪心)

POJ - 2376 给定一个区间,要求用最少的区间将其覆盖 典型的区间贪心问题 首先将区间按左端点排序,然后考虑覆盖区间最左未覆盖位置 选择能覆盖此点,且右端点最靠右的区间覆盖它 要注意特判是否有合法解,如果途中无法覆盖某点, 或者所有区间都用完了也不能覆盖完即无解 #pragma comment(linker, "/STACK:102400000,102400000")

HarmonyOS模拟器(phone-x86-api9)一直卡顿的解决方法

在DevEco Studio 3.1.1 Release版本中的Device Manager中创建本地的模拟器,创建phone-x86-api9模拟器成功,但是启动该新建的模拟器一直显示"HarmonyOS"logo图片,然后一直卡在这里,运行结果如下所示: 检查模拟器日志文件Emulator.log发现存在如下问题: 2024-06-20 10:34:57.131 [Info] set "

Windows Phone 8 开发快速入门(八)

 主要内容:推送通知 推送通知 推送通知为开发者提供了定期将信息传递给应用的功能,即使应用没有启动。图块可以为用户显示最关注的信息 推送通知数据流 Notifications service<--->MPNS(Microsoft hosted server) Third-party service<-->Notificatins service Third-party