ulvis.paste.net

Paste Search Dynamic
Recent pastes
data
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct data{
  5.         int left;
  6.         int right;
  7.         int dif;
  8. };
  9. int main(void) {
  10.         int n;
  11.         scanf("%d",&n);
  12.         struct data*ptr=malloc(sizeof(struct data)*n);
  13.         int max=0,min=20000,total=0;
  14.         for(int i=0;i<n;i++)
  15.         {scanf("%d %d",&ptr[i].left,&ptr[i].right);
  16.         ptr[i].dif=ptr[i].right-ptr[i].left;
  17.         if(ptr[i].right>max)max=ptr[i].right;
  18.         if(ptr[i].left<min)min=ptr[i].left;
  19.         }
  20. struct data **p=malloc(sizeof(struct data*)*n);
  21.         for(int i=0;i<n;i++){
  22.                 p[i]=&(ptr[i]);
  23.         }
  24. struct data *tmp;
  25. for(int i=0;i<n-1;i++){
  26.         for(int j=0;j<n-1;j++){
  27.                 if(p[j]->dif < p[j+1]->dif){
  28.                         tmp=p[j];
  29.                         p[j]=p[j+1];
  30.                         p[j+1]=tmp;
  31.                 }
  32.         }
  33. }
  34. int *num=malloc(max*sizeof(int));
  35.                 for(int i=min;i<max;i++){
  36.                         num[i]=0;
  37.                 }
  38.                 int flag=0;
  39.         int j=0;
  40.                 while(flag!=1){
  41.                 //or(int i=p[j]->left;i<=p[j]->right;i++)num[i]=1;
  42.                         j++;
  43.                         total++;
  44.         /*
  45.                 for(int i=j;i<n;i++){
  46.                                 if(p[i]->left>=p[j-1]->right||p[i]->right<=p[j-1]->left){
  47.                                 continue;
  48.                                 }else if( p[i]->right <= p[j-1]->right && p[i]->right >= p[j-1]->left && p[i]->left<=p[j-1]->left){
  49.                                         p[i]->right=p[j-1]->left;
  50.                                         p[i]->dif=p[i]->right - p[i]->left;
  51.                                 continue;
  52.                                 }else if(p[i]->left >=p[j-1]->left&&p[i]->right>=p[j-1]->right && p[i]->left<=p[j-1]->right){
  53.                                         p[i]->left=p[j-1]->right;
  54.                                         p[i]->dif=p[i]->right-p[i]->left;
  55.                                         continue;
  56.                                 }else if(p[i]->left>=p[j-1]->left&&p[i]->right<=p[j-1]->right){
  57.                                         p[i]->left=0;
  58.                                         p[i]->right=0;
  59.                                         p[i]->dif=0;
  60.                                         continue;
  61.                                 }
  62.                         }
  63.         */
  64.         flag=1;
  65.        
  66.                         for(int i=min;i<max;i++){
  67.                 if(num[i]!=1)break;
  68.                 if(i==max-1)flag=1;
  69.                 }
  70.                 }
  71. //for(int i=min;i<max;i++)printf("%d ",num[i]);
  72. //printf("\n");
  73.         printf("%d\n",j);
  74.         for(int i=0;i<n;i++){
  75.                 printf("%d %d %d\n",p[i]->left,p[i]->right,p[i]->dif);
  76.  
  77.         }
  78. if(p)free(p);
  79. if(num)free(num);
  80. if(ptr)free(ptr);
  81.         return 0;
  82. }
Parsed in 0.014 seconds