24h購物| | PChome| 登入
2009-11-20 23:16:56| 人氣1,423| 回應0 | 上一篇 | 下一篇

ACM 11495 11495 - Bubbles and Buckets

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : 合併排序

應該有辦法DP  先暫時這樣吧

/********************************************************/

#include<stdlib.h>
#include<stdio.h>
int NUM[100001];
long long int ANS=0;
int MergeSort(int,int);
int Merge(int,int,int);
main()
{
  int N;
  while(scanf("%d",&N)==1&&N)
      {
         int a,b,c;
         for(a=0;a<N;a++)
            scanf("%d",&NUM[a]);
         ANS=0;
         MergeSort(0,N-1);
         if(ANS%2)
           puts("Marcelo");
         else
           puts("Carlos");
      }
  return 0;
}
int MergeSort(int l,int h)
{
   if(l<h)
      {
         int m=(l+h)/2;
         MergeSort(l,m);
         MergeSort(m+1,h);
         Merge(l,m,h);
      }
}
int Merge(int l,int m,int h)
{
   int in1=l,in2=m+1,out=l;
   int x[100001],top=0,a,b,D=0;
   while(in1<=m&&in2<=h)
      if(NUM[in1]>NUM[in2])
           x[top++]=NUM[in2++],D++;
      else
           x[top++]=NUM[in1++],ANS+=D;
   while(in1<=m)
       x[top++]=NUM[in1++],ANS+=D;
   while(in2<=h)
       x[top++]=NUM[in2++];
   for(a=l,b=0;a<=h;a++,b++)
      NUM[a]=x[b];
}

台長: 來源不明
人氣(1,423) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類上一篇:ACM 10791 Q10791: Minimum Sum LCM

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文