码迷,mamicode.com
首页 > 其他好文 > 详细

P1555 尴尬的数字(暴力+map)

时间:2018-08-31 11:40:44      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:map   pac   分享   names   二进制   printf   height   cstring   ring   

题意

技术分享图片

题解

枚举每一个可能的二进制数。扔到一个map里

再枚举每一个可能的三进制数看map有没有就行了

反正就是很水

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<map>
 7 using namespace std;
 8 map<long long,bool>ma;
 9 char s1[20000],s2[20000];
10 long long ksm(long long x,long long b){
11     long long tmp=1;
12     while(b){
13         if(b&1){
14             tmp*=x;
15         }
16         b>>=1;
17         x=x*x;
18     }
19     return tmp;
20 }
21 void work(char s[]){
22     long long len=strlen(s+1);
23     long long tmp=0;
24     for(long long i=1;i<=len;i++){
25         tmp=tmp*2+s[i]-0;
26     }
27     for(long long i=1;i<=len;i++){
28         long long ans=tmp+(((s[i]-0)^1)-(s[i]-0))*(1<<len-i);
29         ma[ans]=1;
30     }
31 }
32 void work1(char s[]){
33     long long len=strlen(s+1);
34     long long tmp=0;
35     for(long long i=1;i<=len;i++){
36         tmp=tmp*3+s[i]-0;
37     }
38     for(long long i=1;i<=len;i++){
39         for(long long j=0;j<=2;j++){
40             if(j==s[i]-0)continue;
41             long long ans=tmp+(j-(s[i]-0))*ksm(3,len-i);
42             if(ma[ans]==1){
43                 printf("%lld",ans);
44                 return ;
45             }
46         }
47     }
48 }
49 int main(){
50     scanf("%s",s1+1);
51     scanf("%s",s2+1);
52     work(s1);
53     work1(s2);
54     return 0;
55 } 

 

P1555 尴尬的数字(暴力+map)

标签:map   pac   分享   names   二进制   printf   height   cstring   ring   

原文地址:https://www.cnblogs.com/Xu-daxia/p/9564610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!