Google Kickstart 2020错了答案:我的代码有什么问题?

时间:2020-06-24 04:21:17

标签: c++ algorithm sorting

有N栋房屋待售。第i座房子要花艾美金购买。您的预算为B美元。您最多可以购买多少间房屋?

我的算法非常简单。通过将所有房屋价格添加到由优先队列表示的最小堆中,对所有房屋价格进行排序,然后从队列中弹出价格(按此计数),直到达到预算为止。

所以我真的不知道为什么我的代码甚至不能通过第一个测试用例。任何建议将不胜感激!

enter image description here

这是我的代码:

    #include <iostream>
    #include <bits/stdc++.h> 
    using namespace std; 
        
    int main() {
      
      int t;
      cin >> t; // read t. cin knows that t is an int, so it reads it as such.
      
      for (int i = 1; i <= t; ++i) {
          
         int N, B;
         cin >> N >> B;
         
         priority_queue <int, vector<int>, greater<int> > pq; 
         
         for(int i=0; i<N; i++){
             int a;
             cin >> a; 
             pq.push(a);
         }
         
         long sum = 0;
         long count =0;
         
         while(sum < B){
             sum += pq.top();
             pq.pop();
             ++count;
         }
         
         if(sum > B){
             --count;
         }
          
        cout << "Case #" << i << ": " << count << endl;
      }
      return 0;
    }

(我也将问题提示附加为图片,因为过去我曾因问题提示使我的问题混乱而受到批评,但请让我知道我选择的这种格式是否不好)

1 个答案:

答案 0 :(得分:1)

有些事情可能会让您失望:

vivek_23 提到了while(sum < B),如果我们可以用预算购买所有房屋,而将其更改为while(sum < B && !pq.empty()),则此循环将出现运行时错误。

另外,您在两个嵌套循环中都使用了相同的变量i,将其更改为其他变量