蓝桥杯国赛备赛DAY7

重点来了

dp+dfs+线段树+树状数组+并查集+全排列+图论


第十届蓝桥杯javaB组国赛题

答案: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:(第十届蓝桥杯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:(第十届蓝桥杯C++B组国赛题)

有1个约数的最小数为1(1),有两个约数的最小数为2(1,2)……
有n个约数的最小数为Sn
S1=1 (1)
S2=2 (1 2)
S3=4 (1 2 4)
S4=6 (1 2 3 6)
求S100

答案: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:(第十届蓝桥杯C++B组国赛题)
有一个7X7的方格。方格左上角顶点坐标为(0,0),右下角坐标为(7,7)
求满足下列条件的路径条数:
1、起点和终点都是(0,0)
2、路径不自交
3、路径长度不大于12
4、对于每一个顶点,有上下左右四个方向可以走,但是不能越界

答案: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;
}

猜你喜欢

转载自blog.csdn.net/BOWWOB/article/details/109468289
今日推荐