当前位置: 首页 > 知识库问答 >
问题:

SPOJ美食家Java代码错误答案

阙星渊
2023-03-14

问题陈述:

有N个柜台,每个柜台有指定数量的鸡块
在任何柜台购买的每一块金块的成本与该时间点仍留在柜台的金块数量相同(包括购买的金块)。

Pre希望拥有M块最昂贵的金块。购买M块最昂贵的金块所需的总金额是多少。

有关更详细的问题说明,请参见此处。

这是我的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编码吗?

编辑:删除数组。排序()。替换为计数排序。更新了代码。还没完呢

Edit2:将所有数组转换为long类型。通过所有测试。不知道为什么。谁能告诉我为什么??

共有1个答案

江航
2023-03-14

SPOJ上的java没有问题,不,您不应该退出java编码。大多数竞争对手都使用c语言,但几乎所有网站都支持java作为编程语言,许多人都使用它。我个人使用java解决一些更难用c实现的问题。

现在,关于第二个问题——您的实现存在多个问题,而且我认为您的代码在最坏的情况下会太慢(尝试找出哪一个是最坏的)。

 类似资料:
  • 下面是SPOJ的一个归档问题。示例测试用例通过了,但我在提交时得到了W/A。我缺少一些测试用例(testCase)。需要帮助来找出我错过了什么案例和/或我做错了什么。 瓢虫艾达正在和她的朋友维尼特玩除数游戏。这个游戏有以下规则。他们之间有一堆石头。移动中的玩家可以选择至少1块,最多σ(N)块石头(其中σ(N)代表N的除数)。显然,N在每次移动后都会发生变化。得不到任何石头(N==0)的人输了。 因

  • 链接到挑战 拉梅什和苏雷什每人在彩票上都会得到一个满满五颗星的盒子。由于两个盒子不需要相同数量的巧克力,他们决定玩游戏。获胜者可以同时拥有两盒巧克力。他们交替玩,苏雷什开始游戏。给定两个盒子中的巧克力数量,让它们成为c1和c2,玩家取c1或c2数量的巧克力,并将剩余的一盒巧克力分成两盒(这两个盒子不需要相同数量的巧克力)。不能做出这种举动的玩家输了。输入 输入的第一行包含一个数字 T(1 (1 输

  • 我试着在SPOJ上解决一个问题,我们必须简单地找到给定数组a的最长递增子序列的长度。 我用动态规划O(n^2)算法解决了这个问题,这个解决方案被接受了。。以下是被接受的代码: 但是当我试图用第二种方法(LINK)解决它时,:: ,我得到了错误的答案。 这是我的c代码 我不知道为什么我会得到错误的答案。你能帮我找到这个错误吗。或者站点中给出的基于LCS的LIS算法不正确??

  • 我尝试了以下代码,它与我尝试的自定义输入配合得很好,但是,它不被接受,并显示-WRONG ANSWER SPOJ-https://www.spoj.com/problems/ACPC10A/

  • 这是我的代码。它正在传递问题语句中给出的测试用例。问题链接:http://www.spoj.com/problems/ACPC10D/tri[i][j]存储从tri[0][1]到达索引(i, j)的最小值。

  • 我为跳棋游戏创建了两个类。一个是木板,另一个是碎片。我所面临的困难是,对于这些碎片,我似乎无法让它们移动,也无法让它们正确地停留在那个位置,事实上,由于我不了解这里到底出了什么问题,我无法再前进了。有人能纠正我做错了什么吗。 这是拼图课