Codeforces Ronda # 630 (Div.2) (ABC)

Codeforces Ronda # 630 (Div.2)ABC

Una caminata de ejercicio

El
significado de la pregunta del agua es darte un punto de partida (x, y). Los cuatro números indican el número de pasos en las cuatro direcciones de izquierda, derecha, abajo y arriba respectivamente. Luego, dale un rango (x1 <= x <= x2, y1 <= y <= y2) Debe cumplirse durante el proceso de movimiento, y la secuencia de movimiento puede ser arbitraria.
Pit point -el propio wa de Caiji se ha ido-
y la mayoría de las preguntas van en una dirección diferente.
El movimiento a la izquierda es x-1,
el movimiento a la derecha es x + 1,
el movimiento hacia abajo es y-1 y
el movimiento hacia arriba es y + 1

#include <cstdio>
#include <cstring>

int T, le, ri, down, up;
int x, y, x1, y1, x2, y2;

int main(){
    
    
	scanf("%d",&T);
	while(T--){
    
    
		scanf("%d%d%d%d", &le, &ri, &down, &up);
		scanf("%d%d%d%d%d%d", &x, &y, &x1, &y1, &x2, &y2);
		if(le && ri && le == ri){
    
    
			if(x - 1 < x1 && x + 1 > x2){
    
    
				printf("No\n");
				continue;
			}
		}
		if(down && up && down == up){
    
    
			if(y - 1 < y1 && y + 1 > y2){
    
    
				printf("No\n");
				continue;
			}
		}
		x += ri - le;
		y += up - down;
		if(x >= x1 && x <= x2 && y >= y1 && y <= y2){
    
    
			printf("Yes\n");
		} else {
    
    
			printf("No\n");
		}
	}
	return 0;
} 

B. Coloración compuesta

Problema de agua

Que Italia siente que el tema principal es más difícil de entender el plato inglés de pollo yo mismo,
en el sentido de que el grupo de muestra T, n le da un número, y luego encuentra sus factores primos, son del mismo color digital (mismo resultado ), cambie a un nuevo color si es diferente (cambie a un nuevo número).
Sin embargo, los números de salida deben ser mayores o iguales a 1 y menores o iguales que 11. (El título ha demostrado que el número de colores está dentro de los 11, por lo que es correcto comenzar desde 1 y aumentar hacia arriba).
Idea
Primero, enumere todos los números primos que pueden usarse de acuerdo con el rango de datos y guárdelos en la matriz de primos.
Luego, recorra cada número, encuentre su color correspondiente de izquierda a derecha en la matriz principal y marque si el color se ha utilizado con la matriz vis. Si no lo ha usado, agregue un nuevo color, de lo contrario use el color anterior (color usado).

#include <cstdio>
#include <cstring>

const int N = 1005;
int T, n;
int a[N];
int prime[N], vis[N], sum;
int ans[N];

bool pd(int x){
    
    
    for(int i=2; i*i<=x; i++)
	if(x % i == 0 ) return false;
    return true;
}

int main(){
    
    
    for(int i=2; i<=1000; i++){
    
    
    	if(pd(i)) prime[++sum] = i;
	}   
	scanf("%d",&T);
    while(T--){
    
    
        scanf("%d",&n);
        int cnt = 0;
        memset(vis,0,sizeof(vis));
        for(int i=1; i<=n; i++){
    
    
            scanf("%d",&a[i]);
            for(int j=1; j<=sum; j++) 
			if(a[i] % prime[j] == 0){
    
    
            	if(!vis[j]) {
    
    
					vis[j] = ++cnt;
				}
        		ans[i] = vis[j];
				break;
            }
        }
        printf("%d\n",cnt);
        for(int i=1; i<n; i++) 
		printf("%d ",ans[i]);
        printf("%d\n",ans[n]);
    }
    return 0;
}

C. K-Complete Word

Preguntas de pensamiento
Ley de Palíndromo
1 = n
2 = n-1
3 = n-2
4 = n-3
5 = n-4

Ley periódica
n 2
1 = 3 = 5 = n-1
2 = 4 = 6 = n

n 3
1 = 4 = 7 = n - 2
2 = 5 = 8 = n - 1
3 = 6 = 9 = n

n 4
1 = 5 = 9 = n - 3
2 = 6 = 10 = n - 2
3 = 7 = 11 = n - 1
4 = 8 = 12 = n

De acuerdo con la suma de la cadena del palíndromo y la ley del período k, podemos encontrar
que el período i-ésimo en la ley del período k es el mismo que los elementos del período k-i + 1 y luego fusionarlos en un grupo, y encontrar el mayor número de elementos en cada grupo El número de sumas, y luego restar la suma con el mismo número n / k * 2 es el número de elementos de este grupo que deberían cambiar. (Si i == k-i + 1, significa que solo hay un ciclo, así que conviértalo en un grupo por sí mismo).

#include <cstdio>
#include <cstring>
#include <map>
using namespace std;

const int N = 2e5 + 10;
char s[N];
int T, n, k; 

int main(){
    
    
	scanf("%d",&T);
	while(T--){
    
    
		map<char,int> mp;
		scanf("%d%d",&n,&k);
		scanf("%s",s+1);
		int ans = 0, sum1 = 0, sum2 = 0;
		for(int i=1; i<=(k+1)>>1; ++i){
    
    
			int l = i, r = k - i + 1;
//			printf("%d %d\n",l,r);
			if(l == r){
    
    
				mp.clear();
				sum1 = 0;
				for(int j=l; j<=n; j+=k){
    
    
					mp[s[j]]++;
					if(mp[s[j]] > sum1){
    
    
						sum1 = mp[s[j]];
					}
				}
				ans += n / k - sum1;
			} else {
    
    
				sum2 = 0;
				mp.clear();
				for(int j=l; j<=n; j+=k){
    
    
					mp[s[j]]++;
					if(mp[s[j]] > sum2){
    
    
						sum2 = mp[s[j]];
					}
				}
				for(int j=r; j<=n; j+=k){
    
    
					mp[s[j]]++;
					if(mp[s[j]] > sum2){
    
    
						sum2 = mp[s[j]];
					}
				}
				ans += n / k * 2 - sum2;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_45833169/article/details/109429073
Recomendado
Clasificación