电话狂人

原题:https://pintia.cn/problem-sets/15/problems/722
题目要求:
在这里插入图片描述思路同样也是用优先队列和向量容器实现,不过有一些细节处理的感觉有点不好。比如遍历的时候总是涉及到数组越界的问题和优先队列越界的问题,我都是最后单独讨论了,我也想不到其他的更好的方法了。可能就是这些细节导致我最后是没有通过。
代码:
#include
#include
#include
#include
using namespace std;
priority_queue<long long, vector, greater> Q;
vector<pair<long long, int>> v;

bool compare(const pair<long long, int>& p1, const pair<long long, int>& p2)
{
if (p1.second == p2.second)
{
return p1.first > p2.first;
}
return p1.second > p2.second;
}

int main()
{
long long a, phonenumber = 0;
int b, count = 0;
cin >> b;
for (int i = 0; i < b * 2; i++)
{
cin >> a;
Q.push(a);
}
while (Q.size() > 1)
{
phonenumber = Q.top();
Q.pop();
count++;
if (phonenumber != Q.top())
{
v.push_back(make_pair(phonenumber, count));
count = 0;
}
}
if (Q.top() == phonenumber)
{
count++;
v.push_back(make_pair(phonenumber, count));
}
else
{
v.push_back(make_pair(Q.top(), 1));
}
sort(v.begin(), v.end(), compare);
int j = 0, i;
for (i = 0; i < v.size()-1; i++)
{
if (v[i].second != v[i + 1].second)
{
cout << v[i].first << " " << v[i].second << endl;
return 0;
}
else
{
j++;
}
}
if (v[i].second == v[i - 1].second)
{
j++;
cout << v[i].first << " " << v[i].second << " " << j << endl;
}
}

这里我就要吐槽一下这个pta了,他告诉你错误,但是他也仅仅是告诉你错了,没有输入的样例给你。这几天开始系统的学习数据结构与算法了,之前也都是用到哪些就了解一下,没有系统的学过。这次要认认真真的学习一下了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值