Codeforces Ronda # 632 (Div. 2) parte de la solución a un problema

Codeforces Ronda # 632 (Div. 2)

A. Poco Artem

Significado de las preguntas : ligeramente.

Análisis : Esta construcción de la imagen:

BWW...W
BWW...W
BBB...B
#include <bits/stdc++.h>
using namespace std;
void io() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }

int main() {
	io(); int t;
	cin >> t;
	while (t--) {
		int n, m;
		cin >> n >> m;
		for (int i = 1; i < n; ++i) {
			cout << "B";
			for (int j = 1; j < m; ++j) cout << "W";
			cout << "\n";
		}
		for (int i = 1; i <= m; ++i) cout << "B";
		cout << "\n";
	}
}

B. Tipo Anton

El significado de los problemas : Array \ (a_n \) un \ (\ - \ {1,0,1 \}) que constituyen los elementos, y se puede utilizar cualquier elemento de la matriz \ (A_j \) se reemplaza por \ (+ A_j a_i (J> I) \) , la operación se puede realizar cualquier número de veces, pidiendo matriz \ (a_n \) se puede transformar en una matriz por \ (B_n \)

Análisis : Si \ (A_j <b_j \) , entonces debe haber \ (= a_i 1 (I <J) \.) ; Si \ (A_j> b_j \) , entonces debe haber \ (a_i = -1 (i < j) \) . Luego juez especial \ (J = 1 \) .

#include <bits/stdc++.h>
using namespace std;
void io() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }

int main() {
	io(); int t;
	cin >> t;
	while (t--) {
		int n; cin >> n;
		vector<int> a(n), b(n);
		vector<vector<int> > vis(n, vector<int>(2));
		for (auto& i : a) cin >> i;
		bool f1, f2; f1 = f2 = false;
		int cnt = 0;
		for (auto i : a) {
			if (i < 0) f1 = true;
			if (i > 0) f2 = true;
			vis[cnt][0] = f1;
			vis[cnt++][1] = f2;
		}
		for (auto& i : b) cin >> i;
		bool f = true;
		if (a[0] != b[0]) f = false;
		for (int i = 1; i < n; ++i) {
			if (b[i] > a[i] && !vis[i - 1][1]) {
				f = false;
				break;
			}
			if (b[i] < a[i] && !vis[i - 1][0]) {
				f = false;
				break;
			}
		}
		cout << (f ? "YES\n" : "NO\n");
	}
}

C. Eugene y una matriz

Significado de las preguntas : array Estadísticas \ (a_n \) hay varios secuencia consecutiva satisfacen: la secuencia no existe y es \ (0 \) es una secuencia continua.

Análisis : Statistical y gire a \ (0 \) en secuencia, luego restar.

#include <bits/stdc++.h>
#define ll long long
using namespace std;
void io() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }
map<ll, ll> MP;

int main() {
	io(); int n;
	cin >> n;
	MP[0] = 0;
	ll r = -1, cur = 0, ans = 0;
	for (int i = 1; i <= n; ++i) {
		ll x; cin >> x;
		cur += x;
		if (MP.count(cur)) r = max(r, MP[cur]);
		ans += r + 1;
		MP[cur] = i;
	}
	ans = (n + 1ll) * n / 2 - ans;
	cout << ans;
}

D. Desafíos en la escuela №41

El significado de problemas : Dada una longitud \ (n- \) por el carácter y (L, R \) \ cadenas de caracteres, cada ejecución, se puede seleccionar un par arbitrario de adyacente \ (RL \) , que se convierte en \ (LR \) , se le preguntó si con sólo \ (K \) alrededor de la cadena \ (L \) se mueve a la izquierda del todo, \ (R ^ \) todos se mueven hacia la derecha.

Análisis : Cada operación durante todo somos codiciosos de poder a la posición de intercambio de cambio, las estadísticas necesitan por lo menos unas cuantas rondas para completar el intercambio (conocido como \ (CNT \) ), y contar el número total de intercambios (conocidas como \ (suma \ ) ), si \ (k \ in [CNT, suma] \) entonces se puede dar el programa de intercambio, ya que podemos en una ronda de operación para abrirse a ser capaces de dividirse en \ sum) (\ ronda.

#include <bits/stdc++.h>
#define SIZE 3010
#define ll long long
using namespace std;
void io() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }
vector<int> vec[SIZE];
char s[SIZE];
 
int main() {
	io(); int n, k;
	cin >> n >> k >> (s + 1);
	int cnt = 0, sum = 0;
	while (1) {
		bool flag = false;
		cnt++;
		for (int i = 1; i < n; ++i) {
			if (s[i] == 'R' && s[i + 1] == 'L') {
				flag = true;
				vec[cnt].emplace_back(i);
			}
		}
		for (auto it : vec[cnt]) swap(s[it], s[it + 1]);
		sum += vec[cnt].size();
		if (!flag) break;
	}
    
	cnt--;
	if (k < cnt || k > sum) {
		printf("-1\n");
		return 0;
	}
 
	for (int i = 1; i <= cnt; ++i) {
		while (!vec[i].empty() && k > cnt - i + 1) {
			cout << "1 " << vec[i].back() << '\n';
			vec[i].pop_back();
			k--;
		}
		if (!vec[i].empty()) {
			cout << vec[i].size();
			for (auto it : vec[i]) cout << ' ' << it;
			cout << '\n';
			k--;
		}
	}
}

F. Kate y la imperfección

El significado de problemas : el conjunto \ (S = \ {1,2, \ cdots, n \} \) , para cada entero n \ (. N- \ GEQ K> 1 \) , para encontrar un tamaño \ (K \ ) subconjunto, de modo que los veintidós mayor factor común sub-máxima concentración del mínimo, esta demanda mínima.

Análisis : Consideramos cómo construir el conjunto mínimo de máxima veintidós factor común más grande, por supuesto, es el conjunto de todos los números primos tirado en primer lugar, y luego poner el máximo común ha sido el número del conjunto \ (= 2 \ ) el número perdido en, a continuación, \ (= 3 \) número ...... entonces se dio cuenta de que si añadimos un número compuesto, entonces todo lo que debe haber sido un factor en la colección, por lo que añadir este número puede generarse factor común más grande es su mayor factor, tan codicioso con Egipto tamiz mantener este proceso, la salida se pueden ordenar de nuevo.

#include <bits/stdc++.h>
#define ll long long
using namespace std;
void io() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); }
map<ll, ll> MP;

int main() {
	io(); int n;
	cin >> n;
	vector<int> ans(n + 1, 1);
	for (int i = 2; i <= n; ++i) {
        for (int j = i + i; j <= n; j += i) {
            ans[j] = i;
        }
	}
    sort(ans.begin(), ans.end());
    for (int i = 2; i <= n; ++i) cout << ans[i] << ' ';
}

Supongo que te gusta

Origin www.cnblogs.com/st1vdy/p/12664248.html
Recomendado
Clasificación