[go: up one dir, main page]

0% found this document useful (0 votes)
25 views10 pages

Sample Solution

Uploaded by

Siddharth Katyal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
25 views10 pages

Sample Solution

Uploaded by

Siddharth Katyal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Solution 1:-

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
int E, N, count = 0;
cin>>E>>N;
vector<int> exer(N);
for(int i = 0; i < N; i++)
cin>>exer[i];

sort(exer.rbegin(), exer.rend());
for(int i = 0; i < N; i++)
{
if(E <= 0) break;
E = E - exer[i];
count++;
if(E <= 0) break;
E = E - exer[i];
count++;
}
if(E <= 0)
cout<<count<<endl;
else
cout<<-1<<endl;
}

Solution 2:-

#include <iostream>
#include<vector>

using namespace std;

int main()
{
int n, m, H, i;
cin>>n>>m>>H;
int vptr = n-1, hptr = 0;
vector<int> villains(n);

for(i=0; i<n; i++)


cin>>villains[i];

while(vptr>=0 && hptr<m) {


int hpower = H;
while(vptr>=0) {
int vpower = villains[vptr];

if(hpower > vpower) {


hpower -= vpower;
vptr--;
}
else if(hpower < vpower) {
hptr++;
break;
}
else {
vptr--;
hptr++;
break;
}
}
}

if(vptr>=0) cout<<vptr+1;
else cout<<0;

return 0;
}

Solution 3:-

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int main()
{
int n;
cin>>n;
vector<int> arr(n);
for(int i = 0; i < n; i++)
cin>>arr[i];

int prev = arr[0], sum = 0, max = 0, i;

for(i = 1; i < n; i++)


{
if (arr[i] <= prev)
{
prev = arr[i];
}
else{
sum = arr[i] - (prev-1);
int k = floor(sqrt(sum + 2));
if(k * k == sum + 2)
{
sum++;
prev--;
}
prev--;
max = max>sum?max:sum;
}
}
cout<<ceil(sqrt(max))<<endl;
}

Solution 4:-

#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;

int main(){
int n;
cin>>n;
vector<int> arr(n);

for(int i = 0; i < n; i++) cin>>arr[i];

unordered_map<int, int> m;
if(n&1){
int mid = n/2;
for(int i = 0; i < mid; i++){
if(m.find(arr[i] - i) == m.end()){
m[arr[i] - i] = 0;
}
m[arr[i] - i]++;
}
for(int i = mid; i < n; i++){
if(m.find(arr[i] + i - n + 1) == m.end()){
m[arr[i] + i - n + 1] = 0;
}
m[arr[i] + i - n + 1]++;
}

}
else{
int mid1 = n/2-1, mid2 = n/2;
for(int i = 0; i <= mid1; i++){
if(m.find(arr[i] - i) == m.end()){
m[arr[i] - i] = 0;
}
m[arr[i] - i]++;
}
for(int i = mid2; i < n; i++){
if(m.find(arr[i] + i - n + 1) == m.end()){
m[arr[i] + i - n + 1] = 0;
}
m[arr[i] + i - n + 1]++;
}
}
int maxval = 0, maxfreq = 0;
for(auto it: m){
if(it.second > maxfreq) {
maxval = it.first;
maxfreq = it.second;
}
}
int ans = n - maxfreq;
cout<<ans<<endl;
}

Solution 5:-

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;


int gcd(int a, int b)
{
if(b == 0) return a;
gcd(b,a%b);
}
int main()
{
string s;
cin>>s;
vector<int> freq(26);

int n = s.length();
int ans;
for(int i = 0; i < n; i++)
{
freq[s[i] - 'a'] ++;
ans = freq[s[i] - 'a'];
}

for(int i = 0; i < 26; i++)


{
if(freq[i])
ans = gcd(ans, freq[i]);
}
cout<<ans<<endl;

Solution 6:-

#include <iostream>
#include <vector>
#include <climits>
using namespace std;

struct SegmentTreeNode {
int value;
int index;
};

class SegmentTree {
public:
SegmentTree(const vector<int>& arr) {
n = arr.size();
tree.resize(4 * n);
build(arr, 0, 0, n - 1);
}

SegmentTreeNode query(int l, int r) {


return query(0, 0, n - 1, l, r);
}

private:
int n;
vector<SegmentTreeNode> tree;

void build(const vector<int>& arr, int node, int start,


int end) {
if (start == end) {
tree[node] = {arr[start], start};
} else {
int mid = (start + end) / 2;
build(arr, 2 * node + 1, start, mid);
build(arr, 2 * node + 2, mid + 1, end);
tree[node] = minNode(tree[2 * node + 1], tree[2
* node + 2]);
}
}

SegmentTreeNode query(int node, int start, int end, int


l, int r) {
if (r < start || end < l) return {INT_MAX, -1};
if (l <= start && end <= r) return tree[node];
int mid = (start + end) / 2;
SegmentTreeNode left = query(2 * node + 1, start,
mid, l, r);
SegmentTreeNode right = query(2 * node + 2, mid + 1,
end, l, r);
return minNode(left, right);
}

// Modified to prefer farthest (larger index) on tie


SegmentTreeNode minNode(SegmentTreeNode a,
SegmentTreeNode b) {
if (a.value < b.value) return a;
if (a.value > b.value) return b;
return a.index > b.index ? a : b; // Prefer farther
index
}
};

int main() {
int N, K;
cin >> N;
vector<int> A(N);
for (int i = 0; i < N; ++i) cin >> A[i];
cin >> K;

SegmentTree st(A);

for (int i = 0; i < N; ++i) {


int right = min(N - 1, i + K);
if (i + 1 > right) continue;
SegmentTreeNode minInRange = st.query(i + 1, right);
if (minInRange.value < A[i]) {
swap(A[i], A[minInRange.index]);
break; // Only one swap allowed
}
}

for (int x : A) cout << x << " ";


cout << endl;
return 0;
}

Solution 7:-

#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
int n;
cin>>n;
vector<int> arr(n);
unordered_map<int,int> m;
for(int i = 0; i < n; i++)
cin>>arr[i];

for(int i = 0; i < n; i++)


{
if(m.find(arr[i]) == m.end())
{
m[arr[i]] = 0;
}
m[arr[i]] ++;
}
vector<int> freq;
for(auto it:m) freq.push_back(it.second);

sort(freq.begin(), freq.end());

int m1 = freq.size(), maxCount = 0, count = 0;


int k = m1-1;
if(freq[k] & 1){
maxCount = freq[k];
freq[k]--;
}
for(int i = freq[k]; i > 0; i--){
int j = i;
count = j;
j /=2;
k = m1-2;
while(k>=0)
{
if(freq[k] >= j)
{
count += j;
}
if(j&1) break;
else j /= 2;
k--;
}
maxCount = maxCount < count? count:maxCount;
}
cout<<maxCount<<endl;
}

You might also like