あり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
型にすべてのアレイにコンバート。すべてのテストをパスします。理由を理解できません。誰でもと言うことができますか?
応答ありがとうございます! –
並べ替えは不要です。私はそれを削除した。まだ「WA」を取得しています。私はSPOJ Toolkitを試してみました。そこからすべてのトリッキーなサンプルテストがローカルのボックスで正常に実行されました。しかしSPOJが 'WA'を表示している –
最悪の場合はローカルで実行しようとしましたか?期待される答えが得られますか?私はSPOJのすべてのポイントがあなた自身の問題を解決するために、あなたにさらなるヒントを与えたくありません。 –