SMPAIR - Editorial

guys my submission for this question is giving TLE for first two cases but correct for the other two . Can I know why is it happening so ?

http://www.codechef.com/viewsolution/4271803

please check what is wrong in the given code. online judge gave wrong answer for this
#include
#include
using namespace std;
int main()
{
int t,n,i,j;
cin>>t;
while(t–)
{
cin>>n;
int a[n];
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
cout<<a[0]+a[1];

}
return 0;	

}

can u suggest me few test cases also

The problem statement says, find smallest a[i]+a[j] such that 1 <= i < j <= n. If we sort the array, won’t that disturb the order? If this algo is giving AC, then the problem statement shold be changed to 1 <= i,j <= N

1 Like

Yeah it is too easy for me as i have written it for 13pts(and i have achieved it) its just the sum of those 2 input value here is my code…


program SMPAIR;

var
   T,num,sum:longint;
   N:smallint;
begin
	(* Solution to SMPAIR *)
	readln(T);
	while T <> 0 do
	begin
	readln(N);
	sum := 0;
	while N <> 0 do
	begin
	read(num);
	sum := sum + num;
	dec(N);
	end;
	writeln(sum);
	dec(T);
	end;
end.

Only using printf and cout made a difference , it failed last subtask with cout but passed with printf , same code :stuck_out_tongue: Also, I wasted a hour finding the bug which was just the absence of newline character :stuck_out_tongue:

i m not getting this constraint concept… plzz explain one constriant in brief so thati can code

#include
using namespace std;
int main()
{long long t,n,i,min;

cin>>t;
while(t–)
{ cin>>n;
long long A[n];
for(i=0;i<n;i++)
{cin>>A[i];
}
min=A[0]+A[1];
for(i=0;i<n;i++)
{ if((A[i]+A[i+1])<=min)
min=A[i]+A[i+1];
}
cout<<min<<endl;
}
return 0;
}

wats d problem in my code???

removing memset should work! You don’t need to initialize the array everytime.

what is wrong in my code…its showing wrong answer
#include
using namespace std;
int main()
{
int t,n,y,largest,smallest,secondSmallest;
cin>>t;
while(t–)
{
cin>>n;
int a[n];
y=0;
while(y<n)
{
cin>>a[y];
y++;
}
largest=a[0];
smallest=a[0];
y=1;
while(y<=n)
{
if(a[y]>largest) largest=a[y];
if(a[y]<smallest) smallest=a[y];
y++;
}
if(smallest!=largest)
{
secondSmallest=largest;
y=0;
while(y<=n)
{
if(a[y]<secondSmallest && a[y]!=smallest) secondSmallest=a[y];
y++;
}
}
cout<<smallest+secondSmallest<<endl;
}
}

Java code : AC 100 pts
https://www.codechef.com/viewsolution/10829126

hey i get the result as wrong answer in codechef for my code but while executing the code in my compiler it runs good and gives correct answer

#include

using namespace std;

int main()
{int t,n,a[10],sum,j,i,temp=1000;
cin>>t;
while(t–)
{cin>>n;
for(i=0;i<n;i++)
{cin>>a[i];
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
sum=a[i]+a[j];
if(sum<temp)
temp=sum;

}

}
cout<<temp<<endl;

}
return 0;
}

whats wrong i it?

#include
using namespace std;

int main()
{
long long t,n,sum=0,i,min=1000000;
long long a[1000];
cin>>t;
int j=0;
while(j<t)
{
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n-1;i++)
{
sum=a[i]+a[i+1];
if(sum<min)min=sum;
}
cout<<min<<endl;
j++;
}

return 0;

}
why i am getting WA??Can anyone help??