Showing posts with label Data Structure. Show all posts
Showing posts with label Data Structure. Show all posts

Tuesday, 2 April 2019

Spoj Problem ACMCEG2C - Pick the candies (C++)


  The problem link may be found here.
      Explanation:
  • Use Deque to keep track of elements of the variety of candies.
  • If i is greater that allowed variety of Candies pop the front element of the queue
  • Based of condition only keep the maximum element, pop everything thats smaller than the ith element

 1  #include<bits/stdc++.h>
 2  using namespace std;
 3  void sliding(vector<int>&v,int k){
 4  deque<int>q;
 5  vector<int>res;
 6  for(int i=0;i<v.size();i++){
 7      while(!q.empty() && i-q.front()>=k){
 8          q.pop_front();
 9      }
10      while(!q.empty() && v[q.back()]< v[i]){
11          q.pop_back();
12      }
13      q.push_back(i);
14      if(i>=k-1)res.push_back(v[q.front()]);
15  }
16  for(int i=0;i<res.size();i++){
17          cout<<res[i]<<" ";
18      }
19  }
20  int main(){
21  int t,n,k,m;
22 
23  scanf("%d",&t);
24  while(t--){
25      cin>>n>>k;
26       vector<int>v;
27       vector<int>ans;
28      for(int i=0;i<n;i++){
29          cin>>m;
30          v.push_back(m);
31      }
32      sliding(v,k);
33 
34  cout<<endl;
35  }
36 
37 
38  return 0;}

Sunday, 10 September 2017

UVa Problem 483 - Word Scramble (C++)

Problem:

Please find the problem 
here.

Solution:

This is the simplest problem I ever had, just implement the given formulas! However, it does take me some time to write.

Code:


#include <string>
#include <iostream>

using namespace std;

int main(){

    string line;

    while(getline (cin,line)) {                          

                  int tam = line.size();//10 size of first line
                  int cont;
                  string sub;
                  for(int i=0;i<tam;i++){    //I
                       cont=0;

                       if(line[i]!=' '){   // If there is no space
                                while(line[i+cont]!=' ' && i+cont<tam){
                                       cont++; //count becomes 1
                                }
                                for(int j=(i+cont)-1;j>=i && j<tam;j--){ //print last word j then decrease j--
                                          cout<<line[j];
                                }
                                i+=cont-1; //the next word which is a space
                       }else{ //if there is space
                            cout<<line[i];
                       }
                  }
                  cout<<endl;
    }

 return 0;
}


Spoj Problem ACMCEG2C - Pick the candies (C++)

  The problem link may be found here.       Explanation: Use Deque to keep track of elements of the variety of candies. If i is gre...