由于时间的限制,程序有些地方的容错性不够,以//!!
标出。
运行成功,经Google Code Jam鉴定为正确。
题目为:
Alien Numbers
Problem
The decimal numeral system is composed of ten digits, which we
represent as "0123456789" (the digits in a system are written from
lowest to highest). Imagine you have discovered an alien numeral system
composed of some number of digits, which may or may not be the same as
those used in decimal. For example, if the alien numeral system were
represented as "oF8", then the numbers one through ten would be (F, 8,
Fo, FF, F8, 8o, 8F, 88, Foo, FoF). We would like to be able to work
with numbers in arbitrary alien systems. More generally, we want to be
able to convert an arbitrary number that's written in one alien system
into a second alien system.
Input
The first line of input gives the number of cases, N
. N
test cases follow. Each case is a line formatted as
alien_number source_language target_language
Each language will be represented by a list of its digits, ordered
from lowest to highest value. No digit will be repeated in any
representation, all digits in the alien number will be present in the
source language, and the first digit of the alien number will not be
the lowest valued digit of the source language (in other words, the
alien numbers have no leading zeroes). Each digit will either be a
number 0-9, an uppercase or lowercase letter, or one of the following
symbols !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Output
For each test case, output one line containing "Case #x
: " followed by the alien number translated from the source language to the target language.
Limits
1 ≤ N
≤ 100.
Small dataset
1 ≤ num digits in alien_number
≤ 4,
2 ≤ num digits in source_language
≤ 10,
2 ≤ num digits in target_language
≤ 10.
Large dataset
1 ≤ alien_number
(in decimal) ≤ 1000000000,
2 ≤ num digits in source_language
≤ 94,
2 ≤ num digits in target_language
≤ 94.
Sample
Input
|
Output
|
4
9 0123456789 oF8
Foo oF8 0123456789
13 0123456789abcdef 01
CODE O!CDE? A?JM!.
|
Case #1: Foo
Case #2: 9
Case #3: 10011
Case #4: JAM!
|
我的解答的源代码:
#include <iostream>
#include <fstream>
#include <iterator>
using namespace std;
//A helper function to improve performance of power, basically copied from <stl_numeric.h> of SGI STL
inline long power(long x, long n)
{
if(n == 0) return 1;
else
{
while((n & 1) == 0)
{
n >>= 1;
x *= x;
}
long y = x;
n >>=1;
while(n != 0)
{
x *= x;
if((n & 1) != 0)
y *= x;
n >>=1;
}
return y;
}
}
int main(int argc, char* argv[])
{
//Only for memerizing usage for myself
if(argc != 3)
{
cout << "Usage: nstrans INPUT_FILE OUTPUT_FILE" << endl;
return 0;
}
ifstream fin(argv[1]); //!!
ofstream fout(argv[2]); //!!
//How many cases in total?
int case_max;
fin >> case_max;
fin.ignore(); // ''
string source_number;
string source_language;
string target_language;
string target_number;
int source_digits; //How many digits in source_number?
int source_base; //How many digits in source_language?
int target_base; //How many digits in target_language?
long num; //alien number in demical, since it's less than 1000000000, it's in long's range----assert(sizeof(long) >= 4)
char tmp; //for storing a temp char
for(int cur_case = 1; cur_case <= case_max; cur_case++)
{
//some cleanup
num = 0;
source_number = source_language = target_language = target_number = "";
//tear the case apart
while((tmp = fin.get()) != ' ') source_number += tmp; //!!
while((tmp = fin.get()) != ' ') source_language += tmp; //!!
while((tmp = fin.get()) != '') target_language += tmp; //!!
//
source_digits = source_number.length();
source_base = source_language.length();
target_base = target_language.length();
int e; //exponent
//source number to decimal value
for(e = 0; e < source_digits; e++)
{
num += source_language.find((source_number[source_digits-1 - e])) * power(source_base, e);
}
#ifdef MY_DEBUG
cout << source_number << ' ' << num <<' ';
#endif
//decimal value to target number(reversal order)
e = 1;
while(num > 0)
{
target_number += target_language[num % target_base];
num /= target_base;
}
fout << "Case #" << cur_case << ": ";
//reverse the target number and output
ostream_iterator<char> foutit(fout);
copy(target_number.rbegin(), target_number.rend(), foutit);
fout << endl;
#ifdef MY_DEBUG
ostream_iterator<char> outit(cout);
copy(target_number.rbegin(), target_number.rend(), outit);
cout << endl;
#endif
}
return 0;
}
分享到:
相关推荐
Alien alien.lsm alien.lsm.in alien.pl alien.spec alien.spec.in debian gendiff.txt GPL INSTALL Makefile.PL README TODO [root@yun alien]# ./alien.pl You must specify a file to convert. Usage: alien ...
根据提供的文件信息,本文将详细介绍如何在Linux环境下利用Alien工具安装APM(Application Package Manager)的过程。这里主要聚焦于如何通过Alien将RPM包转换为DEB包,并最终在Lubuntu系统中完成安装。 ### Linux...
由于Ubuntu系统无法使用yum来安装包,所以需要用alien命令来安装rpm包,详细安装方式如下: sudo alien -i MySQL.rpm
`alien`是一个开源的命令行工具,用于在不同的Linux发行版之间转换软件包格式,特别是将RPM包转换为DEB包,使得Ubuntu用户也能安装和管理RPM软件。 **1. 安装alien** 在Ubuntu上安装`alien`非常简单,可以通过apt...
标题中的"alien_8.90.tar.gz"表明这是一个名为"alien"的软件包,版本为8.90,采用的是常见的Unix/Linux压缩格式——tar.gz。这种格式是通过先用tar工具打包文件,然后用gzip进行压缩,常用于在Linux环境中分发源代码...
《Android开源3D游戏引擎Alien3D:深入解析与实战》 在移动游戏开发领域,3D游戏引擎是至关重要的工具,它们为开发者提供了构建复杂、高性能3D游戏的平台。本文将深入探讨Android开源3D游戏引擎Alien3D的类库源码...
《外星人字体探索:深度解析"Alien"字体设计》 在计算机视觉艺术和设计领域,字体扮演着至关重要的角色。"Alien"这一标签所指的,并非我们想象中的外星生物,而是指一类独特、创新且具有科幻感的字体设计。这种设计...
Alien 是一个在 rpm、dpkg、stampede slp 和 Slackware tgz 文件格式之间进行转换的程序。 如果你想使用来自另一个发行版的包而不是你系统上安装的包,你可以使用 alien 将它转换为你喜欢的包格式并安装它。
《 Alien_8.93 在 Debian 环境中的应用与理解》 Alien_8.93.tar.gz 是一个在 Debian 操作系统环境下使用的软件包,它以 tar.gz 的压缩格式提供。这种格式是由 Unix 系统常用的 tar 命令进行归档,然后用 gzip 压缩...
《Linux系统中的软件打包与安装:以alien_8.78.tar.gz为例》 在Linux操作系统的世界里,软件的分发通常采用压缩包的形式,如我们这里提到的"alien_8.78.tar.gz"。这个文件名揭示了它是一个采用gzip压缩的tar归档...
《外星人Alienware OC Controls Application:点亮个性化的游戏世界》 在现代电子竞技与游戏文化中,个性化和定制化成为了玩家追求的热点。Alienware,作为高端游戏硬件的代表品牌,不仅以其强大的性能著称,更以其...
《外星人Alienware的灯光控制神器:Alienware Command Center应用详解》 Alienware,这个在游戏硬件领域享有盛誉的品牌,以其独特的设计和强大的性能深受玩家喜爱。而其中,Alienware Command Center(以下简称ACC...
Alien Product Family Overview,介绍Alien Product 。At Alien® we are proud of the quality of our readers and offer warranty options to back them up. All Alien RFID readers are warranted against ...
本游戏基本上参(zhao)考(ban)了《Python编程从入门到实践》12到13章的...点一下Alien_Invasion.exe就运行啦,Alien_Invasion_code里面有源码~ 只是一个小小白的小小白作品(大部分还是照搬的嘿嘿),只为搏君一笑~
【标题】"Alienware_Invader"是一个与著名游戏电脑品牌Alienware相关的主题资源,可能是用于个性化用户的Windows体验。这个主题包可能包含了桌面壁纸、图标、鼠标指针等元素,让用户的计算机界面看起来更加接近Alien...
**alien 8.74 知识点详解** Alien 是一款强大的软件包转换工具,尤其在Linux环境中,它能够帮助用户将不同类型的软件包格式互相转换。例如,它可以把RPM(Red Hat Package Manager)格式的软件包转换为DEB(Debian...
《alien3D游戏引擎源码类库:深入解析与应用》 alien3D游戏引擎源码类库是一款专为Android平台设计的高性能游戏开发工具,它以其强大的功能和高效的性能,为开发者提供了一种便捷的方式来创建高质量的3D游戏。这款...
《深入探索Android 3D游戏引擎Alien3D的Demo》 在当今移动游戏领域,3D游戏引擎已经成为开发者不可或缺的工具,它们为构建沉浸式、高性能的游戏环境提供了强大支持。其中,Android 3D游戏引擎Alien3D以其独特的特性...
标题“Alienware OEM”指的是与Alienware品牌相关的OEM(Original Equipment Manufacturer)定制内容。在这个场景中,用户提到的“oemlogo.bmp”和“Alienware OEM.reg”是两个关键文件,它们用于自定义Windows操作...