Code: Select all
got AC
Moderator: Board moderators
Code: Select all
got AC
Code: Select all
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i,j,k,n,test;
scanf("%d",&test);
while(test--)
{
scanf("%d",&n);
int flag=0;
int t=(int)sqrt(n);
for(i=0;i<=t;i++)
{
for(j=i;j<=t;j++)
{
for(k=j;k<=t;k++)
{
if(i*i+j*j+k*k==n)
{
flag=1;
break;
}
}
if(flag==1)
break;
}
if(flag==1)
break;
}
if(flag==1)
printf("%d %d %d\n",i,j,k);
else
printf("-1\n");
}
system("pause");
}
Code: Select all
/*
problem no:11342
problem title:three squre
*/
#include<stdio.h>
#include<math.h>
#include<string.h>
int num[60000][4];
int aa[60000];
int squre[100000];
int main()
{
int i,j,k,a,b,c,n,ncase,flag,found;
scanf("%d",&ncase);
memset(aa,0,sizeof(aa));
memset(squre,0,sizeof(squre));
for(i=0;i<=sqrt(50001);i++)
{
squre[i*i]=1;
}
while(ncase>0){
scanf("%d",&n);
if(n%8==7){ //if (num%8==7) not possible.
printf("-1\n");
ncase--;
continue;
}
if(squre[n]==1) //checking whether a squre number,
{
printf("0 0 %d\n",(int)sqrt(n));
ncase--;
continue;
}
if(aa[n]==1){ //checking whether calculated previously(memoization)
printf("%d %d %d\n",num[n][0],num[n][1],num[n][2]);
ncase--;
continue;
}
//else
flag=0;
found=0;
for(i=0;i<=sqrt(n);i++)
{
for(j=i;j<=sqrt(n);j++)
{
for(k=j;k<=sqrt(n);k++)
{
a=i*i;
b=j*j;
c=k*k;
if(n==a+b+c){
printf("%d %d %d\n",i,j,k);
flag=1;
aa[n]=1;
num[n][0]=i;
num[n][1]=j;
num[n][2]=k;
found=1;
break;
}
}
if(flag==1)
break;
}
if(flag==1)
break;
}
if(found==0)
printf("-1\n");
ncase--;
}
return 0;
}
try comparing the sum i*i+j*j don't exceed nsazzadcsedu wrote:can anyone tell me how to optimize it.i got tle.
Code: Select all
#include<stdio.h>
#include<math.h>
#include<string.h>
int num[60000][4];
int aa[60000];
int squre[100000];
int main()
{
int i,j,k,a,b,c,n,ncase,flag,found;
scanf("%d",&ncase);
memset(aa,0,sizeof(aa));
memset(squre,0,sizeof(squre));
for(i=0;i<=sqrt(50001);i++)
{
squre[i*i]=1;
}
while(ncase>0){
scanf("%d",&n);
if(n%8==7){ //if (num%8==7) not possible.
printf("-1\n");
ncase--;
continue;
}
if(squre[n]==1) //checking whether a squre number,
{
printf("0 0 %d\n",(int)sqrt(n));
ncase--;
continue;
}
if(aa[n]==1){ //checking whether calculated previously(memoization)
printf("%d %d %d\n",num[n][0],num[n][1],num[n][2]);
ncase--;
continue;
}
//else
flag=0;
found=0;
for(i=0;i<=sqrt(n);i++)
{
for(j=i;j<=sqrt(n);j++)
{
if(i*i+j*j>n)
{
flag=1;
break;
}
for(k=j;k<=sqrt(n);k++)
{
a=i*i;
b=j*j;
c=k*k;
if(a+b+c==n){
printf("%d %d %d\n",i,j,k);
flag=1;
aa[n]=1;
num[n][0]=i;
num[n][1]=j;
num[n][2]=k;
found=1;
break;
}
if(a+b+c>n){
//flag=1;
break;
}
}
if(flag==1)
break;
}
if(flag==1)
break;
}
if(found==0)
printf("-1\n");
ncase--;
}
return 0;
}
sqrt() takes a lot of time..sazzadcsedu wrote:I changed some portion but still TLE.Can anyone help??