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;
}