翻完了两本算法书,准备水一下UVa,这是UVa的Hello World,不要笑。
首先吐个槽,为毛各大OJ都不支持C++11?看我的两次提交:
①不认识auto
code.cpp: In function ‘int pickLength(int)’: code.cpp:29:7: error: ‘it’ does not name a type auto it = coll.find(i); ^ code.cpp:30:6: error: ‘it’ was not declared in this scope if (it == coll.end()) ^
②不认识EXIT_SUCCESS
code.cpp: In function ‘int main(int, char**)’: code.cpp:68:9: error: ‘EXIT_SUCCESS’ was not declared in this scope return EXIT_SUCCESS; ^
题目简单,值得注意的有两点:
1、溢出,必须用long long
2、i和j的大小要检验
#include <iostream>
#include <map>
using namespace std;
map<long long, long long> coll;
long long getLength(long long n)
{
	long long length = 1;
	while (n != 1)
	{
		++length;
		if (n % 2 == 0)
		{
			n = n / 2;
		}
		else
		{
			n = 3 * n + 1;
		}
	}
	return length;
}
long long pickLength(long long i)
{
	long long iLength = 0;
	map<long long, long long>::iterator it = coll.find(i);
	if (it == coll.end())
	{
		iLength = getLength(i);
		coll[i] = iLength;
	}
	else
	{
		iLength = it->second;
	}
	return iLength;
}
long long solve(long long i, long long j)
{
	if (i > j)
	{
		long long temp = i;
		i = j;
		j = temp;
	}
	long long result = pickLength(i);
	for (long long n = i + 1; n <= j; ++n)
	{
		long long nLength = pickLength(n);
		if (nLength > result)
		{
			result = nLength;
		}
	}
	return result;
}
///////////////////////////SubMain//////////////////////////////////
int main(long long argc, char *argv[])
{
	long long i = 0;
	long long j = 0;
	while (cin >> i >> j)
	{
		cout << i << ' ' << j << ' ' << solve(i, j) << endl;
	}
	/*system("pause");*/
	return 0;
}
///////////////////////////End Sub//////////////////////////////////
码农场