//============================================================================
// Name : 1023.cpp
// Author : sww
// Version : 1.0
// Time : 2013-11-13 12:54:25
//===========================================================================
#include <stdio.h>
#include <cstring>
using namespace std;
#define K 64
typedef long long Long;
typedef unsigned long long Ulong;
int k;
char data[K + 1];
Long temp;
Ulong value;
Ulong p[K];
int isPositive;
bool ok;
int out[K];
void cal(int n, Ulong value) {
if (n < 0) {
if (value == 0)
ok = 1;
else
ok = 0;
return;
}
if (value & 1) {
out[n] = 1;
if (data[n] == 'p' && isPositive || data[n] == 'n' && !isPositive) {
value -= 1;
} else {
value += 1;
}
} else {
out[n] = 0;
}
value = value >> 1;
cal(n - 1, value);
}
int main() {
p[0] = 1;
for (int i = 1; i < K; i++) {
p[i] = p[i - 1] << 1;
}
int t;
scanf("%d", &t);
while (t--) {
scanf("%d", &k);
scanf("%s", data);
scanf("%lld", &temp);
if (temp < 0) {
value = -temp;
isPositive = 0;
} else {
value = temp;
isPositive = 1;
}
cal(k - 1, value);
if (ok) {
Ulong sum = 0;
for (int i = 0; i < k; i++) {
if (out[i]) {
if (data[i] == 'p' && isPositive
|| data[i] == 'n' && !isPositive) {
sum += p[k - i - 1];
} else {
sum -= p[k - i - 1];
}
}
}
if (sum == value) {
for (int i = 0; i < k; i++) {
printf("%d", out[i]);
}
puts("");
} else {
puts("Impossible");
}
} else {
puts("Impossible");
}
}
return 0;
}
poj1023
猜你喜欢
转载自blog.csdn.net/swwlqw/article/details/15813217
今日推荐
周排行