CF 136B Ternary Logic

http://codeforces.com/problemset/problem/136/B

题意 :就是说tor是一个三进制的运算,代表的是两个三进制数的运算,两个三进制数按位逐一相加后对三取余,没有进位,但是如果两个没有相同多的位数的话,短的那个0。而那个样例就是10进制的14和10进制的59进行tor运算,就相当于分别转化成三进制在进行tor运算,a tor b = c,给你a和c,让你求b 。

思路 : 其实也没什么好说的,题懂了,基本上思路也就出来了,我也就是把a c都转化成三进制的,然后用c的三进制减a 的三进制,最后再转化成10进制即可 。

#include<stdio.h>

#include<string.h>

#include<iostream>

using namespace std ;

int aa[110],bb[110],cc[110] ;

int tran(int n ,int *s)

{

    int i = 0 ;

    while(n)

    {

        s[i++] = n%3 ;

        n /= 3 ;

    }

    return i ;

}

int main()

{

    int a,c ;

    memset(aa,0,sizeof(aa)) ;

    memset(bb,0,sizeof(bb)) ;

    memset(cc,0,sizeof(cc)) ;

    while(scanf("%d %d",&a,&c)!=EOF)

    {

        int lena = tran(a,aa) ;

        int lenc = tran(c,cc) ;

        int maxx = lena > lenc?lena:lenc ;

        for(int i = 0 ; i < maxx ; i++)

        {

            cc[i] = cc[i] >= aa[i]?cc[i]:cc[i]+3 ;

            bb[i] = cc[i]-aa[i] ;

        }

        int count = 1 ;

        int b = 0 ;

        for(int i = 0 ; i < maxx ; i++)

        {

            b += (count*bb[i]) ;

            count *= 3 ;

        }

      printf("%d\n",b) ;

    }

    return 0 ;

}
View Code

 

你可能感兴趣的:(log)