Preparación del Torneo Nacional de la Copa Blue Bridge DÍA7

Aquí viene el punto

dp + dfs + árbol de segmento de línea + matriz en forma de árbol + conjunto de verificación + disposición completa + teoría de grafos


Preguntas de la competencia nacional del grupo javaB de la décima Copa Blue Bridge

Respuesta: 839542176

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<set>
#include<algorithm>
#include<sstream>
using namespace std;

int a[9]={
    
    1,2,3,4,5,6,7,8,9};
int t[9];
long long rrrr;
int l_range,r_range;
int main(){
    
    
    
	do{
    
    
        for(int i=0;i<=7;i++){
    
    
            int ln=i+1,rn=9-ln;
            
            long long rl=0;
            long long rr=0;
            long long rres=0;
            string s;
            string s1,s2; 
            
			for(int j=0;j<=i;j++){
    
    
				stringstream sb;
				sb<<a[j];
				
				s1+=sb.str();

			} 
			for(int k=i+1;k<=8;k++){
    
    
				stringstream sb;
				sb<<a[k];
				
				s2+=sb.str();
			}
		
			
			
			stringstream sa1,sa2;
			sa1<<s1;
			sa1>>rl;
			sa2<<s2;	
			sa2>>rr; 

            rres=rl*rr;
            stringstream ssb;
            ssb<<rres;
            s=ssb.str();
            set<char> st;
            int flag=0;
            for(int u=0;u<s.size();u++){
    
    
            	if(s[u]=='0'){
    
    
            		flag=1;
            		break;
            	}
                st.insert(s[u]);
            }
            if(flag){
    
    
            	continue;
            }
            if(st.size()==s.size() && rres>rrrr){
    
    
            	l_range=rl;
            	r_range=rr;
            	for(int i=0;i<=8;i++){
    
    
            		t[i]=a[i];
            	}
                rrrr=rres;
            }
        }
    }while(next_permutation(a,a+9));

    cout<<<<rrrr<<endl;

    cout<<endl;
    
    return 0;
}

A: (Preguntas de la competencia nacional del décimo grupo Blue Bridge Cup C ++ B)

7020

#include<iostream>


using namespace std;

/*

1、2019<X<Y
2、2019^2, X^2, Y^2构成等差数列
满足条件的X和Y可能有多种情况,请给出X+Y的值,并且令X+Y尽可能的小。
*/ 

long long a,b; 


int main(){
    
    
	int flag=0;
    for(int i=2020;;i++){
    
    
    	for(int j=i+1;j*j-i*i <=  i*i-2019*2019;j++){
    
    
    		if(j*j-i*i ==  i*i-2019*2019){
    
    
    			cout<<i+j<<endl;
    			flag=1;
				break;
    		}
    	}
    	if(flag)break;
    }
    return 0;
}

E: (Preguntas de la competencia nacional del décimo grupo Blue Bridge Cup C ++ B)

El número más pequeño con 1 divisor es 1 (1), y el número más pequeño con dos divisores es 2 (1,2) ...
El número más pequeño con n divisores es Sn
S1 = 1 (1)
S2 = 2 (1 2)
S3 = 4 (1 2 4)
S4 = 6 (1 2 3 6)
Encuentre S100

Respuesta: 45360

#include<iostream>


using namespace std;

int res;
int rescur;

void cnt(int x){
    
    
    rescur=0;
    for(int i=1;i<=x;i++){
    
    
        if(x%i==0)  rescur++;
    }
}

int main(){
    
    
    for(int i=1;;i++){
    
    
        cnt(i);
        if(rescur>res)  res=rescur;
        if(res==100){
    
    
            cout<<i<<endl;
            break;
        }
    }
    return 0;
}

D: (Preguntas de la competencia nacional de la décima Copa Blue Bridge C ++ B)
Hay un cuadrado de 7X7. Las coordenadas del vértice de la esquina superior izquierda de la cuadrícula son (0,0) y las coordenadas de la esquina inferior derecha son (7,7).
Encuentre el número de caminos que cumplen con las siguientes condiciones:
1. El inicio el punto y el punto final son ambos (0,0)
2. La ruta no se cruza a sí misma
3., La longitud de la ruta no es más de 12
4. Para cada vértice, hay cuatro direcciones para subir, bajar, izquierda y correcto, pero no puedo cruzar el límite

Respuesta: 206

#include<iostream>

using namespace std;
/*
8*8矩阵
左上角A是0,0 
从A 走到A 按照上下左右走
小于等于12的路径数
走过不能再走
*/

const int N=8;

int arr[N][N];
int v[N][N];
int res;

void dfs(int x, int y,int len){
    
    
    if(len>12) return;
    if(x==0 && y==0){
    
    
        res++;
        return;
    }
    
    
    if(x+1<N && !v[x+1][y]){
    
    
        v[x+1][y]=1;
        dfs(x+1,y,len+1);
        v[x+1][y]=0;
    }
    
    if(y+1<N && !v[x][y+1]){
    
    
        v[x][y+1]=1;
        dfs(x,y+1,len+1);
        v[x][y+1]=0;
    }
    
    if(x-1>=0 && !v[x-1][y]){
    
    
        v[x-1][y]=1;
        dfs(x-1,y,len+1);
        v[x-1][y]=0;
    }
    
    if(y-1>=0 && !v[x][y-1]){
    
    
        v[x][y-1]=1;
        dfs(x,y-1,len+1);
        v[x][y-1]=0;
    }
}

int main(){
    
    
    v[1][0]=1;
    dfs(1,0,1);
    v[1][0]=0;
    
     v[0][1]=1;
     dfs(0,1,1);
     v[0][1]=0;
    
    cout<<res-2<<endl;
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/BOWWOB/article/details/109468289
Recomendado
Clasificación