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