pku acm 1023

来源:互联网 发布:ipad淘宝怎么开店 编辑:程序博客网 时间:2024/04/30 10:13
#include <iostream>#include <cstdio>#include <string>#include <limits>#include <cmath>#include <algorithm>using namespace std;class Funk{public:typedef long long LL;typedef unsigned long long ULL;private:int nbits;//位数string sbits;//每一位的正负情况ULL max,min;bool flg;//标记最小数的符号void initmaxmin(){//cout<<"sbits.size = "<<sbits.size()<<endl;max = 0,min = 0;flg = false;for(int i = nbits-1; i >= 0; i--){if(sbits[i] == 'p'){max += (ULL)(pow(2.0,nbits-i-1));}else //sbits[i] == 'n'{flg = true;min += (ULL)(pow(2.0,nbits-i-1));}//cout<<"i = "<<i<<" "<<decToBin(min)<<endl;}if(flg == false)min = 0;}public:Funk(string s):sbits(s){nbits = sbits.size();initmaxmin();}Funk(int n,string s):nbits(n),sbits(s){initmaxmin();}//10进制数到2进制数的转换string decToBin(ULL n)// n >= 0{if(n == 0)return "0";if(n == 1)return "1";string s;while(n > 1){if(n%2 == 0)s.push_back('0');if(n%2 == 1)s.push_back('1');n /= 2;}s.push_back('1');reverse(s.begin(),s.end());return s;}string representation(LL N){if(N < 0){if(flg == false)return "Impossible";if(N*(-1) > min)return "Impossible";}if(N > 0 && N > max)return "Impossible";ULL tmp = N + min;string s = decToBin(tmp);if(s.size() < nbits){string t(nbits-s.size(),'0');t += s;s = t;}//cout<<"s.size = "<<s.size()<<endl;for(int i = 0; i < nbits; i++){if(sbits[i] == 'n'){s[i] = (s[i] == '0')?'1':'0';}}return s;}};int main(){freopen("in.txt","r",stdin);/*freopen("out.txt","w",stdout);*//*cout<<numeric_limits<long long>::min()<<endl;cout<<numeric_limits<long long>::max()<<endl;cout<<numeric_limits<unsigned long long>::max()<<endl;*/int t;      // 1 <= t <= 10int k;      // 1 <= k <= 64string s;Funk::LL N; //-2^63 ≤ N < 2^63cin>>t;while(t--){cin>>k>>s>>N;Funk f(k,s);cout<<f.representation(N)<<endl;}return 1;}

测试数据:

6

64
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
-9223372036854775808

1
n
2

5
ppppp
0

5
nnnnn
-32

5
nnnnn
-31

5
nnnnn
1

5
nnnnn
0




3
pnp
6

4
ppnn
10


结果如下:

1000000000000000000000000000000000000000000000000000000000000000
Impossible
00000
Impossible
11111
Impossible


原创粉丝点击