pku acm 1023
2011-08-29 23:00
330 查看
#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 <= 10 int k; // 1 <= k <= 64 string s; Funk::LL N; //-2^63 ≤ N < 2^63 cin>>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
相关文章推荐
- acm pku 1222 Extended lights out的算法分析
- pku acm 1922 Ride to School
- POJ 1002求487-3279解题报告——【PKU ACM】
- pku acm 1006
- pku acm 1035
- ACM pku 2719 解题报告(都是输入输出惹的祸)
- PKU ACM 1860 Bellman - Ford 算法
- Pku acm 1611 The Suspects数据结构题目解题报告(九)---- 并查集的应用
- Pku acm 1423 Big Number 解题报告----求n!的位数
- pku acm 1833 排列
- PKU ACM 1163
- pku3436 ACM Computer Factory 最大流
- http://acm.pku.edu.cn/JudgeOnline/problem?id=2407 很水的欧拉
- acm pku 1226 Substring的算法分析与实现
- PKU ACM-1012题 java Joseph
- ACM 多重背包 pku 1276
- POJ 1003求Hangover解题报告——【PKU ACM】
- pku acm 1007
- pku acm 1099
- PKU ACM 1753 第一道bsf算法