Resumen del Grupo C ++ B en el segundo partido provincial de la 11a Blue Bridge Cup 2020

2020/10/18
El año pasado, Blue Bridge hizo una plancha, y estaba muy feliz de llenar los espacios en blanco esta vez. Como persona descuidada, sentí el placer de llenar los espacios en blanco por primera vez. Las grandes preguntas eran más o menos. , La primera pregunta no tiene nada que decir sobre la gran pregunta; la segunda pregunta palíndromo fecha no es clara sobre si AAAAAAAA pertenece a ABABBABA; la tercera pregunta valor de secuencia de cadena. . . El juego fue complaciente con la complejidad de O (nlogn * 26), y resultó que el grandullón me dijo que era O (n). Mirando hacia atrás en los datos, parece ser 1e6. Siento que se va a dar vuelta, espero que sea 1e5; la cuarta pregunta no se juzga. En el lado importante, se desconoce la exactitud, se pasa la muestra, se escribe la quinta pregunta de manera informal y se entrega la muestra; pide un
deseo y guarda uno, ¡espero cambiar el nombre! ! ! ! !
No hay mucha tontería, aquí solo llene los espacios en blanco, principalmente para compartir preguntas y respuestas, el código no es original (principalmente vago), intrusión y borrado.
A. Producción de números de casa
Descripción del problema: Calcule cuántas veces aparece 2 en 1-2020 y observe que 2 no aparece en muchos números.
Idea: Calcular directamente.
Código:

#include <bits/stdc++.h>
using namespace std;
int main() {
    
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    int cnt = 0;
    for (int i = 1; i <= 2020; i++) {
    
    
        int x = i;
        while (x) {
    
    
            if (x % 10 == 2) ++cnt;
            x /= 10;
        }
    }
    cout << cnt << "\n";
    return 0;
}

Respuesta: 624
B. Fracciones
reducidas Descripción del problema: Cuántas fracciones deben calcularse para que el máximo común divisor del numerador y denominador sea 1, y tanto el numerador como el denominador estén entre 1 y 2020.
Idea: juzgue directamente gcd con dos capas de
código de enumeración :

#include <bits/stdc++.h>
using namespace std;
int main() {
    
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    int cnt = 0;
    for (int i = 1; i <= 2020; i++) {
    
    
        for (int j = 1; j <= 2020; j++) {
    
    
            if (__gcd(i, j) == 1) 
                ++cnt;
        }
    }
    cout << cnt << "\n";
    return 0;
}

Respuesta: 2481215
C. Complete el número en forma de serpiente
Descripción del problema: Especifique una matriz de la siguiente manera:
1 2 6 7
3 5 8
4 9
10
Pregúntele cuántas
ideas hay en la fila 20 y la columna 20 : puede abrir una matriz, cada vez que el orden de la hipotenusa o Construya en orden inverso.
Código:

#include <bits/stdc++.h>
using namespace std;
int main() {
    
    
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int x = 1, y = 1;
    int a[100][100] = {
    
    };
    int num = 1;
    for (int i = 1; x <= 50; i++) {
    
    
        for (int j = 0; j < i; j++) {
    
    
            a[x][y] = num++;
            if (j != i - 1) {
    
    
                if (i & 1) --x, ++y;
                else ++x, --y;
            }
        }
        if (i & 1) ++y;
        else ++x;
    }
    cout << a[20][20] << "\n";
    return 0;
}

Respuesta: 761
D.
Descripción del problema de carrera : Corre 2 kilómetros el primer día de cada mes o el primer día de la semana, y corre 1 kilómetro los demás días. Te lo pido desde el 1 de enero de 2000 (inclusive) hasta octubre de 2020 Cuántos kilómetros corrieron el 1 ° (inclusive).
Idea: simule el número de días en un año bisiesto plano, márquelo como el día de la semana, calcule cuántos días quedan a 2 kilómetros de distancia y, finalmente, utilice el número de días + el número de días adicionales calculados.
Código:

// #pragma GCC optimize(2)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <sstream>
#include <cstring>
#include <set>
#include <cctype>
#include <bitset>
#define IO                       \
   ios::sync_with_stdio(false); \
   // cout.tie(0);
using namespace std;
// int dis[8][2] = {0, 1, 1, 0, 0, -1, -1, 0, 1, -1, 1, 1, -1, 1, -1, -1};
typedef unsigned long long ULL;
typedef long long LL;
typedef pair<int, int> P;
const int maxn = 2e8 + 10;
const int maxm = 2e5 + 10;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
const LL mod = 1e9 + 7;
const double eps = 1e-8;
const double pi = acos(-1);
int dis[4][2] = {
    
    1, 0, 0, -1, 0, 1, -1, 0};
int m[13] = {
    
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int w=6;
bool rui(int n)
{
    
    
	if(n%400==0||(n%4==0&&n%100!=0))
	return true;
	return false;
}
int count(int year)
{
    
    
	int cnt=0;
	if(rui(year))
		m[2]+=1;
	if(year==2020)
	{
    
    
		for(int i=1;i<=9;i++)
		{
    
    
			for(int j=1;j<=m[i];j++)
			{
    
    
				if(w==1||j==1)			
				{
    
    
					cnt++;	
				}	
				w++;
				if(w==8)
				w=1;
			}
		}
	}
	else
	{
    
    
		for(int i=1;i<=12;i++)
		{
    
    
			for(int j=1;j<=m[i];j++)	
			{
    
    
				if(w==1||j==1)			
				{
    
    
					cnt++;	
				}
				w++;
				if(w==8)
				w=1;	 
			}
		}		
	}
	if(rui(year))
		m[2]-=1;
	return cnt;
}
int main()
{
    
    
   IO;
   int ans=0;
	for(int i=2000;i<=2020;i++)
	{
    
    
		ans+=count(i);	
	}
	cout<<ans+7580+1;// 还要加上10.1这天 
   return 0;
}

Respuesta: 8879
E. Código de siete segmentos
Descripción del problema: Siete luces de a, b, c, d, e, f, g del tubo digital de siete segmentos, le preguntan cuántos caracteres se pueden expresar como máximo (las luces deben estar conectadas)
Inserte la descripción de la imagen aquí

Idea: Primero dfs, para 7 luces, use 0, 1 para indicar si la luz está encendida o no. Hay (2 ^ 7-1) estados (no se cuenta todo apagado), y juzgue el resultado de cada dfs;
hay dos tipos de jueces método:

  1. Construya una imagen, por ejemplo, a puede ir ab y f, y finalmente comenzar desde un punto brillante para conectarse y juzgar si se pueden alcanzar todos los puntos.
  2. Y verifique el conjunto, las luces adyacentes se cuentan como un conjunto, cada vez que el nodo principal se inicializa como él mismo, si una luz está encendida, una las luces de las luces adyacentes juntas y finalmente juzgue todas las luces que están encendidas Si las luces están todas en un solo juego.

Código:

#include <bits/stdc++.h>
using namespace std;

bool light[7];
vector<vector<int> > G(7);
int ans;

bool judge(vector<int> &v1) {
    
    
    vector<int> v2;
    queue<int> que;
    bool vis[7] = {
    
    };
    que.push(v1[0]);
    vis[v1[0]] = true;
    while (!que.empty()) {
    
    
        int u = que.front();
        que.pop();
        v2.push_back(u);
        for (int i = 0; i < G[u].size(); i++) {
    
    
            int v = G[u][i];
            if (find(v1.begin(), v1.end(), v) != v1.end() && !vis[v]) {
    
    
                que.push(v);
                vis[v] = true;
            }
        }
    }
    sort(v1.begin(), v1.end());
    sort(v2.begin(), v2.end());
    return v2 == v1;
}

void dfs(int dep) {
    
    
    if (dep == 7) {
    
    
        vector<int> v;
        for (int i = 0; i < 7; i++) if (light[i]) v.push_back(i);
        if (v.size() && judge(v)) ++ans;    
        return;
    }
    light[dep] = true;
    dfs(dep + 1);
    light[dep] = false;
    dfs(dep + 1);
}

void build_graph() {
    
    
    G[0].push_back(1), G[0].push_back(5);
    G[1].push_back(0), G[1].push_back(2), G[1].push_back(6);
    G[2].push_back(1), G[2].push_back(3), G[2].push_back(6);
    G[3].push_back(2), G[3].push_back(4);
    G[4].push_back(3), G[4].push_back(5), G[4].push_back(6);
    G[5].push_back(0), G[5].push_back(4), G[5].push_back(6);
    G[6].push_back(1), G[6].push_back(2), G[6].push_back(4), G[6].push_back(5);
}

int main() {
    
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    build_graph();
    dfs(0);
    cout << ans << "\n";
    return 0;
}

Respuesta: 80

Supongo que te gusta

Origin blog.csdn.net/ylwhxht/article/details/109145754
Recomendado
Clasificación