i番目が(2^i)もしくは-(2^i)の重みを持つ様なビット列を考える。
各ビットが正なのか負なのかと整数nが入力として与えられる。
整数nがビット列で表現できるかどうか、表現できる場合はそのビット列を出力する。
aoj0233と似ている。似たアプローチでやってみた。
// uva 10705 #include <iostream> #include <algorithm> using namespace std; typedef long long int lli; int main(void) { int tc; cin >> tc; while( tc-- ){ lli size, n, bit = 1; string s, r; cin >> size >> s >> n; for(int i=size-1; 0<=i; --i){ if( n & bit ){ r += '1'; n -= ( s[i] == 'p' ) ? bit : -bit; } else{ r += '0'; } bit <<= 1; } reverse( r.begin(), r.end() ); cout << ( n ? "Impossible" : r ) << endl; } return 0; }筆算をやる様に、不足の場合は上位のビットから借りてくる。
0 件のコメント :
コメントを投稿