#2580: 在 UVA 不能通過?


morris1028 (碼畜)

學校 : 國立花蓮高級中學
編號 : 3529
來源 : [114.37.59.62]
最後登入時間 :
2021-07-12 19:00:43
d194. 11572 - Unique Snowflakes -- UVa11572 | From: [118.161.219.166] | 發表日期 : 2009-11-01 13:28

我用了快排,跟二分搜尋去找尋最靠近的部份 

但是在ZEROJUDGE可以通過.在UVA卻拿到WA

是輸入 輸出的格式嗎?  還是這裡的測資不好

#include<stdio.h>
#include<stdlib.h>
struct node
{
   int num;
   int L;
}node[1000001]={0};
int compare(const void *ele1, const void *ele2)  
{  
  struct node  *px,*py;  
 
  px=(struct node *)ele1;  
  py=(struct node *)ele2;  
  /* 由小排到大 */   
  if(px->num >= py->num) return 1;  
  else return 0;    
}
int Search(int n,int L)  
{  
 int lower=0, mid, high=L-1;  
 int index=-1;  
    do   /*二分搜尋*/ 
    {  
      mid=(lower+high)/2;  
      if(node[mid].num<n)     lower=mid+1;  
      else if(node[mid].num>n)  high=mid-1;  
      else  index=mid;  
    }  
    while(index==-1&&lower<=high);  
  return index;  

int input()  
{  
  char cha;  
  int x=0;  
  while(cha=getchar())  
     if(cha!=' '&&cha!='\n') break;  
  x=cha-48;  
  while(cha=getchar())   
    {  
     if(cha==' '||cha=='\n') break;  
      x=x*10+cha-48;  
    }  
    return x;  
}
int in[1000001];
int check(int NUM,int last,int now,int N)
{
   int find=Search(NUM,N),a,b,MAX=0;
   for(a=find;a<N;a++)
      if(node[a].num!=NUM) break;
      else
         {
            if(node[a].L>MAX&&node[a].L<now)
               MAX=node[a].L;
         }
   for(a=find-1;a>=0;a--)
      if(node[a].num!=NUM) break;
      else
         {
            if(node[a].L>MAX&&node[a].L<now)
               MAX=node[a].L;
         }
   if(last>MAX)  return last;
   else return MAX;
}
main()
{
  int T;
  scanf("%d",&T);
       while(T--)
          {
            int N,a,b,MAX=0,last=0;
            scanf("%d",&N);
            for(a=0;a<N;a++)
              {
                in[a]=input();
                node[a].num=in[a];
                node[a].L=a;
              }
            qsort(node,N,sizeof(struct node), compare);
           /* for(a=0;a<N;a++)
                printf("%d %d\n",node[a].num,node[a].L);*/
            for(a=0;a<N;a++)
                {
                  int test=check(in[a],last,a,N);
                  if(a-test>MAX) MAX=a-test;
                  last=test;
                }
            printf("%d\n",MAX);
         }
 return 0;
}

 
#2581: Re:在 UVA 不能通過?


morris1028 (碼畜)

學校 : 國立花蓮高級中學
編號 : 3529
來源 : [114.37.59.62]
最後登入時間 :
2021-07-12 19:00:43
d194. 11572 - Unique Snowflakes -- UVa11572 | From: [118.161.219.166] | 發表日期 : 2009-11-01 13:33

以上為錯誤的程式碼

測資不夠嚴格

可以增加以下測資

input:

2

2
1 2

1
1

output:

2

1

 
#8498: Re:在 UVA 不能通過?


dibery (Bor)

學校 : 政治大學
編號 : 23441
來源 : [119.14.19.119]
最後登入時間 :
2016-04-07 01:20:18
d194. 11572 - Unique Snowflakes -- UVa11572 | From: [61.230.94.97] | 發表日期 : 2014-01-01 18:38

這題我是用 STL 的 set 下去解

程式碼寫起來會簡潔的多

 
ZeroJudge Forum