Poj 1023

传送门

大神的分析

十进制转换为二进制,从低位向高位转换,注意数值较大用long long型

每次将1和p相与,分析最低位,当最低位为1且该位为n,p+2,然后右移一位继续计算下一位(因为接右移一位,所以p+2和p++等效)

(这个地方我觉得还可以考虑将该位设为0,有其他可能还要再考虑)

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int main(){
 5     int t;
 6     int k;
 7     char n[70];
 8     char res[70];
 9     long long p;
10     cin>>t;
11     while(t--){
12         cin>>k;
13         cin>>n;
14         cin>>p;
15         memset(res,0,sizeof(res));
16         while(k--){
17             if(p&1){
18                 if(n[k]=='n'){
19                     p++;
20                 }
21                 res[k]='1';
22             }
23             else{
24                 res[k]='0';
25             }
26             p>>=1;
27         }
28         if(p){
29             cout<<"Impossible"<<endl;
30         }
31         else{
32             cout<<res<<endl;
33         }
34     }
35 }

 

posted @ 2017-05-31 20:53  水野玛琳  阅读(234)  评论(0编辑  收藏  举报