题解 SP94 【MAYA - Numeral System of the Maya】
题意分析
这道题主要是模拟出玛雅人的数字,而且这数字非常小,所以开个数组把情况都累计下来就好了
解题思路
由题可以得到玛雅人数字表示方式,这里根据 \(.\) 和 \(-\) 的数量打个 \(20\) 的表,当符号为 \(S\) 的时候理解成两个符号的数量都为 \(0\)。
还有这到题的进制不太一样,所以应该前三个打个表,然后后面的跑循环
void make_number(){
K[1]=1; K[2]=20; K[3]=360; for(int i=4;i<=8;i++) K[i]=K[i-1]*20;
number[0][0]=0 ; number[1][0]=1 ; number[2][0]=2 ; number[3][0]=3 ; number[4][0]=4 ;
number[0][1]=5 ; number[1][1]=6 ; number[2][1]=7 ; number[3][1]=8 ; number[4][1]=9 ;
number[0][2]=10; number[1][2]=11; number[2][2]=12; number[3][2]=13; number[4][2]=14;
number[0][3]=15; number[1][3]=16; number[2][3]=17; number[3][3]=18; number[4][3]=19;
return;
}
\(number\) 数组的第一维表示 \(.\) 的数量,第二维表示 \(-\) 的数量,\(K\) 表示每一位数再 \(10\) 进制下的价值。
然后每次就可以枚举从大到小这样就不用数组存起来了
for(int i=N;i>=1;i--){
int P=0, H=0;// 核心代码
for(char ch=getchar();ch!='\n';ch=getchar()){
if(ch=='.') P++;
if(ch=='-') H++;
}
Ans=Ans+number[P][H]*K[i];
}
Made By \(\operatorname{wheneveright}\).

浙公网安备 33010602011771号