[2016.7.Test1] T1 三进制异或
来源:互联网 发布:i淘宝网首页 编辑:程序博客网 时间:2024/05/19 00:10
三进制异或
(xor.c/pas/cpp limit 1s 128M)
【问题描述】
Leego 买到了一台不同寻常的计算机,它是三进制的!
在一番探索之下,Leego 发现了这个计算机的一个特性……它的异或(XOR)运算。
我们知道二进制的异或运算的结果就是把两个加数的二进制形式的每一位分别相加,不要进位,然后逐位模 2 得到的二进制数就是答案,如
12(1100) XOR 10(1010) = 6(0110) (括号里为二进制形式)
而这台三进制计算机的异或运算也是类似的:将加数的三进制形式的每一位分别相加,不要进位,然后逐位模 3 得到的三进制数就是答案。
比如,14(0112) XOR 50(1212) = 34(1021) (括号里为三进制式)
请你编一个程序:读入两个十进制数 A 和 C,输出最小的十进制整数 B,使得在 Leego 的三进制计算机中 A XOR B = C
【输入】
两个十进制整数,表示 A 和 C
【输出】
一个十进制整数 B
(ps:样例好像有错)
【输入输出样例 1】
14 50 34
【输入输出样例 2】
50 34 14
【数据说明】对于 30%的数据:A,C<=100
对于 70%的数据:A,C <=10000 对于 100%的数据,0<=A,C<=10^6
测试数据:
in1
62 10
out1
41
in2
98 8
180
in3
51 6
out3
63
in4
1247 8624
out4
7386
in5
1263 6830
out5
8564
in6
4289 514
out6
5336
in7
9306 88
out7
17863
in8
565419 592345
out8
105910
in9
863652 10000
out9
1530187
in10
761645 10
out10
1443836
AC代码:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#define maxn 1000000using namespace std;int a,c;int bita[maxn],bitc[maxn]; int len;int bitb[maxn];typedef long long ll;void solve(){ for(int i=len;i>=1;i--) { for(int j=0;j<3;j++) { if((bita[i]+j)%3==bitc[i]) bitb[i]=min(bitb[i],j); } } long long w = 1; long long ans = 0; for(int i=1;i<=len;i++) { ans += bitb[i]*w; w*=3; } cout<<ans;}void work(){ int cnta = 0; while(a) { bita[++cnta]=a%3; a/=3; } int cntc = 0; while(c) { bitc[++cntc]=c%3; c/=3; } len = max(cnta,cntc); for(int i=1;i<=len;i++)bitb[i]=9; solve();}int main(){ #define FLOG #ifdef FLOG freopen("xor.in","r",stdin); freopen("xor.out","w",stdout); #endif scanf("%d%d",&a,&c); work(); return 0;}
计算A xor B
检验代码:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#define maxn 1000000using namespace std;int a,b;int bita[maxn],bitb[maxn]; void work(){ int cnta = 0; while(a) { bita[++cnta]=a%3; a/=3; } int cntb = 0; while(b) { bitb[++cntb]=b%3; b/=3; } int len = max(cnta,cntb); for(int i=1;i<=len;i++) bita[i] = (bita[i]+bitb[i])%3; long long w = 1; long long ans = 0; for(int i=1;i<=len;i++) { ans += bita[i]*w; w*=3; } cout<<ans;}int main(){ #define FLOG #ifdef FLOG freopen("xorcheck.in","r",stdin); freopen("xorcheck.out","w",stdout); #endif scanf("%d%d",&a,&b); work(); return 0;}
- [2016.7.Test1] T1 三进制异或
- test1
- test1
- test1
- test1
- test1
- test1
- TEST1
- test1
- test1
- TEST1
- Test1
- test1
- Test1
- Test1
- Test1
- test1
- test1
- js表格特效
- 桥接模式
- 智能流技术与流媒体播放方式
- 八大渲染引擎(如VRAY)的分析
- Codeforces Round #361 (Div. 2)E. Mike and Geometry Problem
- [2016.7.Test1] T1 三进制异或
- Spring注解
- 剑指offer--5.用两个栈实现队列
- 思考、随想
- Android--从路径中提取文件名
- 支持流媒体传输的网络协议
- 拥有与有用
- 2016sdau课程练习专题三 1009
- 音频动态压缩第三层(MPEG Audio Layer-3)