Created
September 19, 2020 18:12
-
-
Save SumanSudhir/0eaf4b3270e33ff60c4da303070a3eee to your computer and use it in GitHub Desktop.
hackerrank
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
vector<string> split_string(string); | |
/* | |
* Complete the waiter function below. | |
*/ | |
vector<int> primeNumber(int n){ | |
vector<int> prime_number(n); | |
int index=0; | |
int temp=2; | |
bool isPrime = true; | |
while(index<n){ | |
isPrime = true; | |
for(int k=2;k<=sqrt(temp);k++){ | |
if(temp%k == 0) isPrime = false; | |
} | |
if(isPrime) prime_number[index++] = temp; | |
temp++; | |
} | |
return prime_number; | |
} | |
vector<int> waiter(vector<int> number, int q) { | |
vector<int> output; | |
vector<int> A_0 = number; | |
vector<int> A_1; | |
vector<int> B_1; | |
vector<int> prime_number = primeNumber(q); | |
int temp; | |
for(int i=0;i<q;i++){ | |
A_1 = {}; | |
temp = prime_number[i]; | |
if(A_0.size() == 0) break; | |
while(A_0.size() != 0){ | |
if(A_0.back()%temp == 0) B_1.push_back(A_0.back()); | |
else A_1.push_back(A_0.back()); | |
A_0.pop_back(); | |
} | |
A_0 = A_1; | |
while(B_1.size() != 0){ | |
output.push_back(B_1.back()); | |
B_1.pop_back(); | |
} | |
} | |
while(A_1.size() != 0){ | |
output.push_back(A_1.back()); | |
A_1.pop_back(); | |
} | |
return output; | |
} | |
int main() | |
{ | |
ofstream fout(getenv("OUTPUT_PATH")); | |
string nq_temp; | |
getline(cin, nq_temp); | |
vector<string> nq = split_string(nq_temp); | |
int n = stoi(nq[0]); | |
int q = stoi(nq[1]); | |
string number_temp_temp; | |
getline(cin, number_temp_temp); | |
vector<string> number_temp = split_string(number_temp_temp); | |
vector<int> number(n); | |
for (int number_itr = 0; number_itr < n; number_itr++) { | |
int number_item = stoi(number_temp[number_itr]); | |
number[number_itr] = number_item; | |
} | |
vector<int> result = waiter(number, q); | |
for (int result_itr = 0; result_itr < result.size(); result_itr++) { | |
fout << result[result_itr]; | |
if (result_itr != result.size() - 1) { | |
fout << "\n"; | |
} | |
} | |
fout << "\n"; | |
fout.close(); | |
return 0; | |
} | |
vector<string> split_string(string input_string) { | |
string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) { | |
return x == y and x == ' '; | |
}); | |
input_string.erase(new_end, input_string.end()); | |
while (input_string[input_string.length() - 1] == ' ') { | |
input_string.pop_back(); | |
} | |
vector<string> splits; | |
char delimiter = ' '; | |
size_t i = 0; | |
size_t pos = input_string.find(delimiter); | |
while (pos != string::npos) { | |
splits.push_back(input_string.substr(i, pos - i)); | |
i = pos + 1; | |
pos = input_string.find(delimiter, i); | |
} | |
splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1)); | |
return splits; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment