六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 100|回复: 0

Alien Numbers

[复制链接]

升级  62%

7

主题

7

主题

7

主题

童生

Rank: 1

积分
31
 楼主| 发表于 2013-1-27 05:16:56 | 显示全部楼层 |阅读模式
Google Code Jam 2008 Practice one

http://code.google.com/codejam/contest/dashboard?c=agdjb2RlamFtcg4LEghjb250ZXN0cxh5DA

Arbitrary size numberal system conversion

1. numInputSystem[inputSystem], inputSystem is a char, actually converts to ASC2 in this array.
These 94 signals or numbers are consistent ASC2 codes.
2. Converts to decimal at first.

Java code:
public class CodeJam1 {public static void convertSystem(char[] alienNum, char[] inputSystem, char[] outputSystem) {int inputSize = inputSystem.length;int outputSize = outputSystem.length;int[] numInputSystem = new int[300];for(int i = 0;i < inputSize;i ++) {numInputSystem[inputSystem] = i;}int x = 0;for(int i = 0;i < alienNum.length;i ++) {x = (x * inputSize) + numInputSystem[alienNum];}//Decimal NumberSystem.out.println(x);StringBuilder output = new StringBuilder();while(x != 0) {StringBuilder temp = new StringBuilder();output = temp.append(outputSystem[x % outputSize]).append(output);x /= outputSize;}System.out.println("Case #1: " + output.toString());}public static void main(String[] args) {char[] alienNum = "CODE".toCharArray();char[] inputSystem = "O!CDE?".toCharArray();char[] outputSystem = "A?JM!.".toCharArray();//char[] alienNum = "2".toCharArray();//char[] inputSystem = "0123456789".toCharArray();//char[] outputSystem = "01".toCharArray();//char[] alienNum = "10".toCharArray();//char[] inputSystem = "01".toCharArray();//char[] outputSystem = "0123456789".toCharArray();CodeJam1.convertSystem(alienNum, inputSystem, outputSystem);}}

C code
#include <iostream>#include <algorithm>#include <cstring>#include <cstdlib>#include <vector>#include <string>#include <set>#include <map>#include <queue>#include <bitset>#include <cctype>#define int64 long long#define ii pair<int,int>#define vi vector<int>#define mp make_pair#define pb push_back#define all(v) (v).begin(),(v).end()#define sz(v) ((int)(v.size()))using namespace std;template<class T> T abs(T x){return x>0 ? x:(-x);}template<class T> T sqr(T x){return x*x;}int num1[300],num2[300];int c1,c2;int main(){int n;cin >> n;for(int ic=0;ic<n;ic++){memset(num1,-1,sizeof(num1));string s,s1,s2;cin >> s >> s1 >> s2;for(int i=0;i<sz(s1);i++)num1[s1]=i;for(int i=0;i<sz(s2);i++)num2[s2]=i;c1=sz(s1);c2=sz(s2);int64 x=0;for(int i=0;i<sz(s);i++){if(num1[s]==-1) while(1);x=(x*(int64)c1)+(int64)(num1[s]);}string ss;if(!x) ss+=s2[0];while(x){ss=s2[x%c2]+ss;x/=c2;}cout << "Case #" << ic+1 << ": " << ss << "\n";}return 0;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表