A

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main() {
	freopen("number.in", "r", stdin);
	freopen("number.out", "w", stdout);
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++) {
		int x;
		cin >> x;
		int j = 0;
		while(pow(2, j) < x) j++;
		if(pow(2, j) == x) cout << 1;
		else cout << 0;
	}
	return 0;
}

B

#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;

ll a[5005], w[5005], b[5005], sum[5005];

int main() {
	freopen("star.in", "r", stdin);
	freopen("star.out", "w", stdout);
	ll n, m, x, y;
	cin >> n >> m >> x >> y;
	for(int i = 1; i <= n; i++) cin >> a[i];
	for(int i = 1; i <= n; i++) {
		cin >> w[i];
		sum[i] = sum[i - 1] + w[i];
	}
	for(int i = 1; i <= m; i++) cin >> b[i];
	ll minn = 1e18;
	for(int i = 1; i <= n - m + 1; i++) {
		bool flag = true;
		for(int j = i; j <= i + m - 1; j++) {
			if(a[j] != b[j - i + 1]) {
				flag = false;
				break;
			}
		}
		if(flag) {
			ll xx = i, yy = i + m - 1, cost = 0;
			if(xx < x) cost += sum[x] - sum[xx];
			else if(xx > x) cost += sum[xx - 1] - sum[x - 1];
			
			if(yy < y) cost += sum[y] - sum[yy];
			else if (yy > y) cost += sum[yy - 1] - sum[y - 1];
			cout << xx << ' ' << yy << ' ' << cost << endl;
			minn = min(minn, cost);
		}
	}
	cout << minn << endl;
	return 0;	
}

D

#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;

ll n, ty, minn = 1e18, a[3005], b[3005], ans[3005];
bool vis[3005];

void dfs(ll cur, ll sum) {
	if(cur == n + 1) {
		if(sum < minn) {
			minn = sum;
			if(ty == 0) {
				for(int i = 1; i <= n; i++) ans[i] = b[i];
			}
		}
	}
	for(int i = 1; i <= n; i++) {
		if(!vis[i]) {
			vis[i] = true;
			b[cur] = i;
			ll maxn = a[b[1]], minn = a[b[1]];
			for(int j = 2; j <= cur; j++) {
				maxn = max(maxn, a[b[j]]);
				minn = min(minn, a[b[j]]);
			}
			dfs(cur + 1, sum + maxn - minn);
			vis[i] = false;
		}
	}
}

int main() {
	freopen("twilight.in", "r", stdin);
	freopen("twilight.out", "w", stdout);
	cin >> n >> ty;
	for(int i = 1; i <= n; i++) cin >> a[i];
	dfs(1, 0);
	cout << minn << endl;
	if(ty == 0) {
		for(int i = 1; i <= n; i++) cout << ans[i] << ' ';
	}
	return 0;	
}