i got his problem here is that once i enter value for test cases like here 3
the compiler treats it as the first string and prints regularly fancy for this How to fix this new problem whic i encounter when i use getline ??
Reading T
wonât read the rest of the line after T
, so the next call to getline
will read the remaining characters after T
until the end of the line.
You need to skip the rest of the line after reading T
:
int T;
cin>>T;
// Skip to the next line.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
After that, youâll need to fix the potential out-of-bounds access on the line:
else if (str[len-1]=='t' && str[len-2]== 'o' && str[len-3]== 'n' && str[len-4]== ' '){
what did you mean by this i have no clue ?
Consider the testcase:
1
t
i ran with this and the
output :
regularly fancy
isnât that whats supposed to be he output ??
since i m not much familiar with getline() funnction i wanna kno i did a slight adjustment in the code earlier and got an error message
the small change i made was
int T;
getline(cin,T); // instead of cin>>T;
but i got an error while compiling which says :
main.cpp:12:18: error: no matching function for call to âgetline(std::istream&, int&)â
can you explain why this happened and why this dint happen when i used getline to read a string ?
i got the answer its basically because :
std::getline()
function is not for integer type. and i was using it to read an integer in the variable T
in this basically i took two sets and stored n different integers(ranging from 1 to 10^9) into each of the two multiset data structures. and since multisets store values already sorted so i used a for loop and tried to tranverse in both sets from the beginning till the end and did a small job. But it exceeds time limit of 5 seconds on online judge.
Note : i used multiset as it sorts a data in O(logn) time.
So is the problem occuring because i m dealing with very big number of the order upto 10^9 ???
my piece of code :
#include <stdio.h>
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
int main()
{
int T;
cin>>T;
for(int k=0;k<T;k++) {
int a,n;
int sum = 0;
scanf("%d",&n);
// cin>>n; // n ranges from 1 to 10^9
// multiset declare
multiset<int> s;
for (int i =0;i<n;i++){
// cin>>a;
scanf("%d",&a);
s.insert(a);
}
//multiset 2 declare
multiset<int> s1;
for (int i =0;i<n;i++){
scanf("%d",&a);
// cin>>a;
s1.insert(a);
}
// Iterator declared to traverse
// set elements
multiset<int>::iterator it, it1;
// now i want where iterator is look for values i the two sets and compare them and store the shorter of the two values in an int variable sum.
for (it = s.begin(), it1 = s1.begin(); it != s.end(); it++,it1++) {
(*it <= *it1 ) ? (sum=sum + (*it)) : (sum = sum + (*it1));
}
//cout<<sum;
printf("%d",sum);
printf("\n");
}
return 0;
}
can you help why time limit is exceeding even when i m using multisets
I would say try using a regular array and then sort it before iterating through it.
but why isnât multiset a good choice for this purpose ?