我试图解决这个问题:https://www.hackerrank.com/challenges/board-cutting
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#define LL long long
#define M 1000000007LL
using namespace std;
int T,n,m;
LL cc;
struct Cut{
int dir;
LL cost;
Cut(const int& dir, const LL& cost): dir(dir), cost(cost){}
Cut(){}
bool operator<(const Cut& cut) const
{
return this->cost >= cut.cost;
}
};
vector<Cut> c;
int main() {
cin >> T;
while(T--){
cin >> n >> m;
LL ans = 0, cnt[2] = {0};
c.clear();
for(int i=0; i<n-1; i++) cin >> cc, c.push_back(Cut(0, cc));
for(int i=0; i<m-1;i++) cin >> cc, c.push_back(Cut(1, cc));
sort(c.begin(), c.end());
for(int i=0; i<c.size(); i++){
cout << c[i].cost << endl;
}
cout << "END" << endl;
for(Cut x : c){
(ans += x.cost*(1+cnt[!x.dir]))%=M;
cnt[x.dir]++;
}
cout << ans << endl;
}
return 0;
}
我有这样的C ++代码,它消耗来自std I / O的输入
我添加了一个循环来输出矢量对象的cost属性。 现在进行以下输入:
2
83 99
24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
99 49
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
第二个测试用例没有成本24(只有第一个测试用例有24个) 但是如果你运行代码,你会发现vector在sort()之后包含了Cut对象,其成本为24!
为什么会发生这种情况,我该如何解决?
(以上示例输入是此问题的hackerrank官方测试用例输入,因此确保其正确性)
答案 0 :(得分:3)
你的operator>
有一些非常错误:
bool operator<(const Cut& cut) const
{
return this->cost >= cut.cost;
}
如果两个元素相等,则返回true
,而它应返回false
!
尝试一下,你会找到平安(虽然反向逻辑对我来说似乎仍然很奇怪,也许在这种情况下有意义,我没有阅读问题陈述):
bool operator<(const Cut& cut) const
{
return this->cost > cut.cost;
}
我觉得奇怪的另一件事是你在m-1
和n-1
停止循环。您不想阅读m
和n
值吗?