2016-12-19 5 views
0

問題文:SPOJ食通Javaコードの間違った回答

ありN-カウンタが利用可能であり、各カウンタは、チキンナゲットの指定された数を持っています。
いずれのカウンターでも購入されたナゲットのコストは、その時点でカウンターに残っているナゲットの数と同じです(ナゲットの購入を含む)。

Preは、最も高価なナゲットを望んでいます。最も高価なナゲットを購入するのに必要な合計金額はいくらですか?

詳細な問題文については、hereを参照してください。ここで

は私のJavaコードです:

import java.util.*; 
import java.lang.*; 
import java.io.*; 
class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     int t,n,i,max; 
     long ans,m,k; 
     BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); 
     t = Integer.parseInt(br.readLine());; 
     while(t!=0) 
     { 
      ans = 0; 
      n = Integer.parseInt(br.readLine());; 
      int a[] = new int[n]; 
      int b[] = new int[100005]; 
      int c[] = new int[100005]; 
      StringTokenizer tk = new StringTokenizer(br.readLine()); 

      i = 0; 
      while(tk.hasMoreTokens()){ 
      a[i] =Integer.parseInt(tk.nextToken()); 
      i++; 
      } 

      m = Long.parseLong(br.readLine()); 
      max = a[0]; 
      for(i=0;i<n;i++){ 
      if(a[i]>max){ 
       max = a[i]; 
      } 
      } 
      for(i=0;i<n;i++){ 
      b[a[i]]++; 
      } 

      c[max] = b[max]; 

      for(i=max-1;i>=1;i--){ 
      if(b[i]!=0){ 
       c[i] = c[i+1] + b[i]; 
      } 
      else{ 
      c[i] = c[i+1]; 
      } 
      } 
      k = 0; 

      for(i=max;i>=1;i--){ 
      if(c[i]>=m-k){ 
       ans = ans + (m-k)*i; 
       break; 
      } 
      else{ 
       ans = ans + c[i]*i; 
       k = k + c[i]; 
      } 
      } 
      System.out.println(ans); 
      t--; 
     } 
    } 
} 

これは、単純なテストケースの正しい答えを与えるが、SPOJ上間違った回答を与えます。私のロジックに問題はありますか、またはJava自体がSPOJで間違った答えを出していますか? JAVAに問題がある場合は、JAVAでコーディングを終了して競争上の問題を解決する必要がありますか?

編集:削除されたArrays.sort()。並べ替えソートに置き換えられました。コードを更新しました。それでもWA

EDIT2を取得:long型にすべてのアレイにコンバート。すべてのテストをパスします。理由を理解できません。誰でもと言うことができますか?

答えて

0

SPOJではJavaに問題はありません.JAVAではコーディングを終了しないでください。ほとんどの競合他社はC++で競争していますが、ほとんどすべてのサイトがプログラミング言語としてのJavaをサポートしており、多くの人がそれを使用しています。私は個人的にはC++で実装するのが難しいいくつかの問題のためにJavaを使用しています。

2番目の質問には、実装に複数の問題があり、最悪のケースではコードが遅すぎると思います(どちらが最悪かを判断してみてください)。

+0

応答ありがとうございます! –

+0

並べ替えは不要です。私はそれを削除した。まだ「WA」を取得しています。私はSPOJ Toolkitを試してみました。そこからすべてのトリッキーなサンプルテストがローカルのボックスで正常に実行されました。しかしSPOJが 'WA'を表示している –

+0

最悪の場合はローカルで実行しようとしましたか?期待される答えが得られますか?私はSPOJのすべてのポイントがあなた自身の問題を解決するために、あなたにさらなるヒントを与えたくありません。 –

関連する問題