Codeforces и Polygon могут быть недоступны в период с 23 мая, 7:00 (МСК) по 23 мая, 11:00 (МСК) в связи с проведением технических работ. ×
 
 
 
 
Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
145298385 Дорешивание:
Qiulyqwq
1336D - 27 C++17 (GCC 9-64) Полное решение 15 мс 36 КБ 2022-02-05 17:23:11 2022-02-05 17:23:11
→ Исходный код
// #pragma GCC optimize ("Ofast,no-stack-protector,fast-math")
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define rez resize
#define pb push_back
#define mkp make_pair
#define debug(...) fprintf (stderr, __VA_ARGS__)

typedef long long ll;
typedef pair <int, int> pii;

#define lep(i, l, r) for (int i = (l), i##_end = (r); i <= i##_end; ++ i)
#define rep(i, r, l) for (int i = (r), i##_end = (l); i >= i##_end; -- i)

char __c; bool __f; template <class T> inline void IN (T & x) {
	__f = 0, x = 0; while (__c = getchar (), ! isdigit (__c)) if (__c == '-') __f = 1;
	while (isdigit (__c)) x = x * 10 + __c - '0', __c = getchar (); if (__f) x = -x;
}

template <class T> inline void chkmin (T & x, T y) { if (x > y) x = y; }
template <class T> inline void chkmax (T & x, T y) { if (x < y) x = y; }

const int N = 1e2 + 5;

int n, a[N];
ll triplet, straight;
pair <ll, ll> tmp[N];
map <ll, int> mp;

inline pair <ll, ll> query (int x) {
	printf ("+ %d\n", x), fflush (stdout);
	ll _t = triplet, _s = straight;
	IN (triplet), IN (straight);
	return mkp (straight - _s, triplet - _t);
}

inline void case0 () {
	for (int i = 4; i <= n; i += 2) tmp[i] = query (i);
	tmp[2] = query (2);

	if (n > 5) {
		tmp[0] = tmp[n - 2] = query (n - 2);
		a[n - 2] = tmp[n - 1].fi == 0 ? 0 : mp[tmp[n - 2].se] - 1;
	}
	tmp[1] = tmp[3] = query (3);
	a[3] = tmp[2].fi == 0 ? 0 : mp[tmp[3].se] - 1;

	for (int i = 2; i <= n - 2; i += 2) tmp[i] = query (i), a[i] = mp[tmp[i].se] - 2;
	for (int i = 4; i <= n - 4; i += 2) {
		tmp[i].fi -= (a[i - 2] + 2) * (a[i - 1] + (i == 4));
		a[i + 1] = tmp[i].fi / (a[i - 1] + (i == 4) + a[i + 2] + 1);
	}
	if (n > 5) {
		tmp[n - 3].fi -= (a[n - 5] + 2) * (a[n - 4] + (n == 7));
		tmp[n - 3].fi -= (a[n - 4] + (n == 7)) * (a[n - 2] + 1);
		a[n - 1] = tmp[n - 3].fi / (a[n - 2] + 1) - 1;

		a[n] = (tmp[0].fi - (a[n - 3] + 1) * (a[n - 4] + a[n - 1] + 1)) / (a[n - 1] + 1);
		a[1] = (tmp[1].fi - (a[4] + 1) * (a[2] + a[5] + 1 + (n == 7))) / (a[2] + 1);
	} else {
		tmp[4] = query (4), a[4] = mp[tmp[4].se] - 2;

		a[5] = (tmp[4].fi - (a[2] + 2) * (a[3] + 1)) / (a[3] + 1);
		a[1] = (tmp[2].fi - (a[3] + 1) * (a[4] + 1)) / (a[3] + 1);
	}
}
inline void case1 () {
	for (int i = 4; i <= n; i += 2) tmp[i] = query (i);
	while (n > 4 && tmp[n].fi == 0) {
		tmp[n] = query (n);
		a[n - 1] = 0, a[n] = mp[tmp[n].se] - 2, n -= 2;
	}
	if (n == 4) {
		tmp[3] = query (3), tmp[2] = query (2);
		a[2] = tmp[3].fi == 0 ? 0 : mp[tmp[2].se] - 1;
		tmp[4] = query (4), a[4] = mp[tmp[4].se] - 2;
		a[3] = tmp[4].fi / (a[2] + 1) - 1;
		a[1] = tmp[2].fi / (a[3] + 1) - a[4] - 1;
		return ;
	}

	tmp[2] = query (2);
	tmp[n - 2] = query (n - 2), a[n - 2] = mp[tmp[n - 2].se] - 2;
	a[n - 1] = tmp[n].fi / (a[n - 2] + 1);
	tmp[3] = query (3);
	a[3] = tmp[2].fi == 0 ? 0 : mp[tmp[3].se] - 1;

	for (int i = 2; i <= n - 4; i += 2) tmp[i] = query (i), a[i] = mp[tmp[i].se] - 2;
	a[1] = (tmp[2].fi - (a[3] + 1) * (a[4] + 1 + (n == 6))) / (a[3] + 1);
	for (int i = 4; i <= n - 4; i += 2) {
		tmp[i].fi -= (a[i - 2] + 2) * (a[i - 1] + (i == 4));
		a[i + 1] = tmp[i].fi / (a[i - 1] + (i == 4) + a[i + 2] + 1 + (i == n - 4));
	}
	tmp[n - 2].fi -= a[n - 3] * (a[n - 4] + 1 + a[n - 1]);
	a[n] = tmp[n - 2].fi / a[n - 1] - 1;
}

signed main () {
	IN (n), IN (triplet), IN (straight);
	lep (i, 2, n + 5) mp[1ll * (i - 1) * (i - 2) / 2] = i;

	int _n = n;
	(n & 1) ? case0 () : case1 ();

	printf ("! ");
	lep (i, 1, _n) printf ("%d ", a[i]);
	puts (""), fflush (stdout);
	return 0;
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования