uva10905同一思路的两种做法,前一种WA,后一种AC

这道题应该算一道普通的排序吧,实际上就是另一种形式地比大小,自己最开始是用int型存,后来觉着不行,改用long,结果还是WA,这是第一个程序。

第二个程序是改用string处理,确实比int方便很多,在运算符重载那里体现就非常明显。

这个题目用到了之前总结过的结构体加入优先级队列需要重载运算符,之所以写成结构体是因为我不知道直接将string加入优先级队列时怎么写比较函数。。。⊙﹏⊙b

通过这个题目充分说明你不知道测试数据到底有多么大,所以还是用string来处理大数据比较好。

转载请注明出处,谢谢!

原文地址:http://blog.csdn.net/monkeyduck

第一个程序

#include<iostream>
#include<cmath>
#include<queue>

using namespace std;

struct Node
{
	int data,size;
	bool operator < (const Node& a) const
	{
		if (size==a.size)
			return data<a.data;
		long long t1=(data*pow(10,double(a.size))+a.data);
		long long t2=(a.data*pow(10,double(size))+data);
		return t1<t2;
	}
};

int n;
int main ()
{
	while (cin>>n&&n)
	{
		priority_queue<Node> que;
		for (int i=0;i<n;i++)
		{
			int num,flag=0;
			cin>>num;
			Node node;
			node.data=num;
			while (num)
			{
				num=num/10;
				flag++;
			}
			node.size=flag;
			que.push(node);

		}
		while(!que.empty())
		{
			cout<<que.top().data;
			que.pop();
		}
		cout<<endl;

	}
	return 0;
}

第二个程序,AC代码

#include<iostream>
#include<queue>
#include<string>

using namespace std;
struct Node
{
	string str;
	bool operator < (const Node& a) const
	{
		return str+a.str<a.str+str;
	}
};
priority_queue<Node> que;
int n;
int main()
{
	while (cin>>n&&n)
	{
		for (int i=0;i<n;i++)
		{
			Node node;
			cin>>node.str;
			que.push(node);
		}
		while (!que.empty())
		{
			cout<<que.top().str;
			que.pop();
		}
		cout<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值