Quantcast
Channel: CodeChef Discuss - latest questions
Viewing all articles
Browse latest Browse all 40121

chef and strange matrix

$
0
0

i have submitted it twice please help with it(WA).http://www.codechef.com/viewsolution/3900502 All i am doing is checking that the input is correct or not.the ans is only affected by increase of last guy or first guy only.Atleast codechef should tell the case for which the answer is wrong once the contest is over,i.e for general practice problems.

#include"stdio.h"
#include"stdlib.h"
#include"stdbool.h"

typedef struct two_together{
int x;
int y;
int count;
}complex_array;
int comparefunc(const void a,const void b) {
complex_array aa = *(complex_array*)a;
complex_array bb = *(complex_array*)b;
if (aa.x>bb.x)
{
return -1;
}
else if(aa.x == bb.x)
{
if(aa.y>bb.y)return 1;
else if(aa.y<bb.y)return -1;
else return 0; 
}
else return 1;
}

int main(void)
{
bool loop_break;
complex_array hold[100000+10] = {{0},{0},{0}};
complex_array *second_frequency = malloc((100000+10)*sizeof(complex_array));
for (int i = 0; i < 100000+10; ++i)
{
second_frequency[i].x = 0;
second_frequency[i].y = 0;
second_frequency[i].count = 0;
}
int n,m,p,temp1,temp2,p_copy,i = 1,general_counter,ans = 0;
scanf("%d",&n);
scanf("%d",&m);
scanf("%d",&p);
p_copy = p;
while(p--)
{
scanf("%d %d",&temp1,&temp2);
hold[i].x = temp1;
hold[i].y = temp2;
hold[i].count++;
i++;

}
qsort(hold+1,p_copy,sizeof(complex_array),comparefunc);
int j = 1;
for (int i = 1; i <=p_copy ;i++)//compressed array
{
int prev = i;
while(((hold[i].x == hold[i+1].x)&&(hold[i].y == hold[i+1].y)))
{
hold[prev].count++;i++;
}
second_frequency[j].x = hold[prev].x; 
second_frequency[j].y = hold[prev].y;
second_frequency[j].count = hold[prev].count;
j++;
}
//for (int i = 1; i < j;++i)printf("%d %d           
//%d\n",second_frequency[i].x,second_frequency[i].y,second_frequency[i].count );
int prev_y;
int prev_max_count;
ans =0;
general_counter = j-1;
for (int i = 1; i <=n ; ++i)//row 1 to n ans
{
loop_break = false;
if((second_frequency[general_counter].x==i)&&(general_counter>=1))
{

if (second_frequency[general_counter].y!=m)
{
   if(second_frequency[general_counter].count>1)
      {
      printf("%d\n",-1 );
      while(second_frequency[general_counter].x==i)general_counter--;
      }
   else
       {
       prev_max_count = second_frequency[general_counter].count;
       prev_y = second_frequency[general_counter].y;
       general_counter--;
       while((second_frequency[general_counter].x==i)&&(general_counter>=1))
       {
       if (second_frequency[general_counter].y+1 == prev_y)
       {
           if(!(second_frequency[general_counter].count<=prev_max_count+1))
           {
           loop_break = true;
           printf("%d\n",-1 );
                break;
            }

        }
        else if(second_frequency[general_counter].count>1)
        {
            loop_break = true;
            printf("%d\n", -1);break;
        }
        prev_y = second_frequency[general_counter].y;
        prev_max_count = second_frequency[general_counter].count;
        general_counter--;

    }
    if (!loop_break)//assuring loop doesnt break
    {
        if (second_frequency[general_counter+1].y == 1)
            {
            ans-=second_frequency[general_counter+1].count;
            }
        printf("%d\n", m-1+ans);
    }

}

}

else
{
ans+=second_frequency[general_counter].count;
prev_max_count = second_frequency[general_counter].count;
prev_y = second_frequency[general_counter].y;
general_counter--;
while((second_frequency[general_counter].x==i)&&(general_counter>=1))
     {
        if (second_frequency[general_counter].y+1 == prev_y)
        {
            if (!(second_frequency[general_counter].count<=prev_max_count+1))
            {
                loop_break = true;
                printf("%d\n",-1 );
                break;
            }

        }
        else if(second_frequency[general_counter].count>1)
           {
           loop_break = true;
           printf("%d\n", -1);break;
           }
           prev_y = second_frequency[general_counter].y;
           prev_max_count = second_frequency[general_counter].count;
           general_counter--;

    }
    if (!loop_break)//assuring loop doesnt break
    {
        if (second_frequency[general_counter+1].y == 1)
            {
            ans-=second_frequency[general_counter+1].count;
            }
        printf("%d\n", m-1+ans);
    }

}

} else { printf("%d\n",m-1 ); }

ans = 0;
}

free(second_frequency);
return 0;
}

Viewing all articles
Browse latest Browse all 40121

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>