PKU 1023 The Fun Number System
下位ビットから順に計算していく、Nのiビット目が1ならば、より上位のビットがiビット目に影響することはないので、出力も1となる。
#include <iostream> #include <string> using namespace std; int main() { int t; cin >> t; while ( t-- > 0 ) { int k; string sys; long long N; cin >> k >> sys >> N; string w; for ( int i=k-1; i>=0; i-- ) { int s = sys[i] == 'p' ? 1 : -1; if ( ( N & 1 ) == 0 ) w = '0' + w; else w = '1' + w, N -= s; N >>= 1; } if ( N != 0 ) w = "Impossible"; cout << w << endl; } return 0; }
C 134B。2009/12/14現在最短。
__int64 N;char*t; main(k,v){ for(gets(v); ~scanf("%d%s%lld",&k,v,&N); puts(N?"Impossible":v)) for(t=v+k;t-->v;N/=2) *t=N%2?N-=*t-111,49:48; }
Ozyさんのページを見ると、_int64(アンダーバー1つ)で書いているのだが、コンパイルエラー。VC2008で仕様が変わったのだろうか?