Educativa Codeforces Ronda 84 Div2 题 解 (ABCDE)

Game Link: https://codeforces.com/contest/1327

A. La suma de los números enteros impares

Hasta unos minutos para cargar a cabo, corte y corte fijos 555 A

análisis de la onda y se encontró un mínimo de \ (K \) número debe ser \ (l, 3,5, ..., (-2K. 1) \) , si el \ (n- \) es menor que la suma de ellos, no es

Y si la paridad de la suma de ellos y \ (n \) no es lo mismo no funciona

#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=[]{ios::sync_with_stdio(0); cin.tie(0); return 0;}();
typedef long long ll;
const int N=200010;
#define int ll
int t,n,j;
signed main(){
	cin>>t;
	while(t--){
		cin>>n>>j;
		cout<<(j*(1+2*j-1)/2<=n && (j*(1+2*j-1)/2+n)%2==0?"YES":"NO")<<endl;
	}
	return 0;
}

B. Princesas y Príncipes

Muy largo título para el autismo

En primera ola de partidos, y luego encontrar dos de salida no emparejado en la línea de

De ÓPTIMA directa supuesto que no se encuentra

Pollo picante advertencia Código

#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=[]{ios::sync_with_stdio(0); cin.tie(0); return 0;}();
typedef long long ll;
const int N=200010;
#define int ll
int t,n,j;
bool f[N],g[N]; //g表示公主被匹配,f表示王子被匹配
vector<int> a[N];
void find(){
	cout<<"IMPROVE"<<endl;
	repeat(i,0,n)if(!g[i]){cout<<i+1; break;}
	repeat(i,0,n)if(!f[i]){cout<<' '<<i+1<<endl; break;}
}
signed main(){
	cin>>t;
	while(t--){
		cin>>n;
		repeat(i,0,n)a[i].clear();
		fill(f,f+n,0);
		fill(g,g+n,0);
		int cnt=0;
		repeat(i,0,n){
			int m,x; cin>>m;
			repeat(j,0,m)cin>>x,x--,a[i].push_back(x);
			for(auto p:a[i]){
				if(!f[p]){
					f[p]=1;
					g[i]=1;
					cnt++;
					break;
				}
			}
		}
		if(cnt==n)cout<<"OPTIMAL"<<endl;
		else find();
	}
	return 0;
}

C. Juego con las virutas

EMMM directa de entrada \ (n-, m \) como, de entrada de vuelta perezoso y salida puntos pueden atravesar todo el pie

Dudé durante mucho tiempo

#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=[]{ios::sync_with_stdio(0); cin.tie(0); return 0;}();
typedef long long ll;
const int N=200010;
#define int ll
int t,n,m;
signed main(){
	cin>>n>>m;
	string s;
	s+=string(m-1,'L');
	s+=string(n-1,'U');
	repeat(i,0,n){
		if(i%2==0)s+=string(m-1,'R');
		else s+=string(m-1,'L');
		if(i!=n-1)s+='D';
	}
	cout<<s.length()<<endl;
	cout<<s<<endl;
	return 0;
}

Ruta D. Infinito

Será el reemplazo del ciclo debería haber ningún problema

En primer lugar, hay un teorema no saben lo que era el nombre de cualquier reemplazo se puede dividir en una serie de permutación cíclica disjuntos

¿Qué? Lo reemplazos de ciclo son? 13 temas no lo exponga (enorme niebla)

Lo permutación cíclica puede encontrar algún aspecto blog como el más simple y fácil de obtener el Wiki-OI: https://oi-wiki.org/math/permutation-group/

Entonces les defecto será este teorema:

primero Encontramos una cíclico permutación \ (P \) (todo cíclico permutación debe sobrevivir una operación posterior), la longitud denota \ (LEN \) , de hecho \ (P ^ k \) de hecho puede ser dividen además en múltiples pequeña permutación cíclica, y exactamente \ (\ gcd (k, len ) \) a, por supuesto, la longitud de cada ciclo menor se sustituye con \ (\ dfrac {len} { \ gcd (k, lEN)} \)

Y las conclusiones \ (\ mcd (k, len ) \) igual a dos \ (k \) arrancaron el reemplazo pequeño lazo es exactamente el mismo (can \ (LEN = 6, k = 1 ... 6 \) juego una obra de teatro)

Así que dejamos que \ (k \) a través de todo el \ (len \) divisor (por lo que cada \ (\ mcd (k, len ) \) no son los mismos), los pequeños ciclos cada permutación pregunte a cabo no es sólo un color, si se actualiza la respuesta

La complejidad final es \ (O (n \ n sqrt ) \)

Pollo picante advertencia Código

#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=[]{ios::sync_with_stdio(0); cin.tie(0); return 0;}();
typedef long long ll;
const int N=200010;
#define int ll
int t,n,m,ans;
int a[N],co[N],vis[N];
vector<int> rec,v;
bool work2(int s,int step){
	int n=rec.size();
	int p=s,nxt=(p+step)%n;
	while(nxt!=s){
		if(rec[p]!=rec[nxt])return 0;
		p=nxt,nxt=(p+step)%n;
	}
	return 1;
}
void work(){
	int n=rec.size();
	for(int i=1;i<n;i=n/(n/(i+1))) //这花里胡哨的其实是求n的所有约数
	if(n%i==0){
		repeat(j,0,i){
			if(ans<=i)return;
			if(work2(j,i)){
				ans=min(ans,i);
				return;
			}
		}
	}
	int i=n;
	repeat(j,0,i){
		if(ans<=i)return;
		if(work2(j,i)){
			ans=min(ans,i);
			return;
		}
	}
}
signed main(){
	cin>>t;
	while(t--){
		cin>>n;
		fill(vis,vis+n+1,0);
		repeat(i,1,n+1)cin>>a[i];
		repeat(i,1,n+1)cin>>co[i];
		ans=1e9;
		repeat(i,1,n+1)if(!vis[i]){
			int p=i;
			rec.clear();
			while(!vis[p]){
				rec.push_back(co[p]);
				vis[p]=co[p];
				p=a[p];
			}
			work();
		}
		cout<<ans<<endl;
	}
	return 0;
}

Recuento de E. Los Bloques

Es feliz (sang) olor música (Xin) (Bing) ver (Kuang) el título de conde

Para cada tamaño \ (I \) rápida, hemos encontrado que si put que el medio, que tiene dos números adyacentes \ (9 \) th valores (adición en bloque y el mismo valor), los restantes la \ (-2 ni \) bloque tiene \ (10 \) ésimo valor

Si lo pones en la frontera, sólo hay un número adyacente a ella, y por lo tanto algunas modificaciones

Por último, para volver sobre ella

#include <bits/stdc++.h>
using namespace std;
#define repeat(i,a,b) for(int i=(a),_=(b);i<_;i++)
#define repeat_back(i,a,b) for(int i=(b)-1,_=(a);i>=_;i--)
int cansel_sync=[]{ios::sync_with_stdio(0); cin.tie(0); return 0;}();
typedef long long ll;
const int N=200010;
const int mod=(0?1000000007:998244353); ll mul(ll a,ll b,ll m=mod){return a*b%m;} ll qpow(ll a,ll b,ll m=mod){ll ans=1; for(;b;a=mul(a,a,m),b>>=1)if(b&1)ans=mul(ans,a,m); return ans;} ll getinv(ll v,ll m=mod){return qpow(v,m-2,m);}
#define int ll
int t,n,m;
signed main(){
	cin>>n;
	repeat(i,1,n+1){
		ll ans=0;
		if(n-i>=2){
			ans+=mul(81*(n-i-1),qpow(10,n-i-2));
			ans+=mul(9*2,qpow(10,n-i-1));
			ans%=mod;
		}
		else if(n-i==1){
			ans+=mul(9*2,qpow(10,n-i-1));
			ans%=mod;
		}
		else ans=1;
		ans=mul(ans,10);
		cout<<ans<<' ';
	}
	return 0;
}

Supongo que te gusta

Origin www.cnblogs.com/axiomofchoice/p/12556454.html
Recomendado
Clasificación