Algorithm


Problem Name: 2 AD-HOC - beecrowd | 1770

Problem Link: https://www.beecrowd.com.br/judge/en/problems/view/1770

Shuffle

 

By Cristhian Bonilha, UTFPR BR Brazil

Timelimit: 1

Your favorite band just released a new album, and to make this experience even more exciting you decided to listen to the songs in a random order. To do that you wrote an algorithm that would make a playlist with K songs of the album. The problem is that your algorithm is not very effective in the way the songs are chosen, in a way that some songs could be played more than once before other songs would be played for the first time.

Given the number of songs of the album, the duration of each song, and the playlist generated by your algorithm, say how long it would take for you to listen to all the songs of the album at least once, if that is possible.

 

Input

 

There will be at most 150 test cases. Each test case starts with two integers M and K, indicating the number of songs in the album and the number of songs in your playlist (1 ≤ M ≤ 100, 1 ≤ K ≤ 1000).

Following there will be M integers mi, indicating that the i-th song of the album has mi minutes (1 ≤ mi ≤ 300, for each 1 ≤ iM).

Following there will be K integers ki, indicating that the i-th song of the playlist is the track of number ki (1 ≤ kiM, for each 1 ≤ iK).

The input ends with end of file (EOF).

 

Output

 

For each test case print one line, containing one integer, indicating how long it would take for you to listen to all the songs of the album at least once. If this is not possible, print -1.

 

 

 

Input Sample Output Sample

3 5
120 135 122
1 3 1 2 3
3 5
120 135 122
1 3 1 3 3

497
-1

 

Code Examples

#1 Code Example with C++ Programming

Code - C++ Programming


#include <bits/stdc++.h>

using namespace std;
int main()
{
	map < int,int> mp;
	
	int m;
	int k;
	vector<int> v;
	int ans;
	int q;
	
	while(cin >> m >> k)
	{
		v.assign(m,0);
		for (int i = 0 ; i  <  m ; i++)
		{
			cin >> v[i];
		}
		ans = 0;
		for (int i = 0 ; i  <  k; i++)
		{
			cin >> q;
			--q;
			
			if (mp.size()  <  m) ans+= v[q];
			mp[q]++;
		}
		if (mp.size()  <  m) cout << "-1\n";
		else cout << ans << '\n';
		
		mp.clear();
		v.clear();
	}
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
3 5 120 135 122 1 3 1 2 3 3 5 120 135 122 1 3 1 3 3

Output

x
+
cmd
497 -1
Advertisements

Demonstration


Previous
#1769 Beecrowd Online Judge Solution 1769 SSN 1 Solution in C, C++, Java, Js and Python
Next
#1786 Beecrowd Online Judge Solution 1786 SSN 2 Solution in C, C++, Java, Js and Python