蓝桥杯第十二届b组国赛真题--备战国赛版h

第一题0带宽 - 蓝桥云课

考的是8Mbps=1MB/s直接算就行--》200/8

第二题0纯质数 - 蓝桥云课

dfs枚举

每个十进制位上都是质数--》直接用2,3,5,7填充每一位然后枚举--》符合条件的即

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm> 
using namespace std;
typedef long long ll; 
const int N=15;
int a[5]={2,3,5,7};
int ans[N];
int res=0;
ll limit = 20210605;

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

void dfs(int x,ll sum)
{
	if(sum>limit)return;
	if(sum>=1&&sum<=limit&&isprim(sum))
	{
		res++;
	} 
	if(x>=10)return;
	for(int i=0;i<4;i++)
	{
		ans[x]=i;
		dfs(x+1,sum*10+a[i]);
	}
}

int main()
{
	dfs(1,0);
	cout<<res<<endl;
	return 0;
}

第三题0完全日期 - 蓝桥云课

日期题目--》用日期模板一个个枚举,符合条件的就++

cpp 复制代码
#include<iostream>
#include<cstring>
#include<iostream>
using namespace std;
int ans=0;

bool check(int y,int m,int d)
{
	int sum=0;
	sum=y%10+(y/10%10)+(y/100%10)+(y/1000)+m%10+(m/10)+d%10+(d/10);
	for(int i=1;i*i<=sum;i++)
	{
		if(i*i==sum)
		{
			return true;
		}
	}
	return false;
}

int main()
{
	for(int y=2001;y<=2021;y++)
	{
		for(int m=1;m<=12;m++)
		{
			for(int d=1;d<=31;d++)
			{
				if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
				{
					
				}
				else if(m==2)
				{
					if((y%4==0&&y%100!=0)||(y%400==0))
					{
						if(d>29)continue;
					}
					else
					{
						if(d>28)continue;
					}
				}
				else
				{
					if(d>30)continue;
				}
				if(check(y,m,d))
				{
					ans++;
				}
			}
			
		}
	}
	cout<<ans<<endl;
	return 0;
} 

第四题0最小权值 - 蓝桥云课

是一个模拟题目--》但是要记得一个点:左右子树个数=n-1也就是减去根节点的个数--》然后枚举左右子树的个数

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
long long dp[2022];

int l,r;
int main()
{
	memset(dp,0x3f3f3f3f,sizeof dp);
	dp[0]=0;
	for(int i=1;i<=2021;i++)
	{
		for(int j=0;j<i;j++)
		{
			l=j;
			r=i-j-1;
			dp[i]=min(dp[i],1+2*dp[l]+3*dp[r]+l*l*(r));
		}
	}
	cout<<dp[2021];
	return 0;
} 

第五题0大写 - 蓝桥云课

一个简单的模拟题,就是遍历字符串把小写转大写

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
string s;
int main() 
{
	cin>>s;
	for(int i=0;i<s.length();i++)
	{
		char a=s[i];
		if(a>='a'&&a<='z')
		{
			s[i]=a+'A'-'a';
		}
	}
	cout<<s<<endl;
	return 0;
}

第六题0123 - 蓝桥云课

前缀和解决(但这个题目稍微有点绕)

首先要算出他在哪一组,然后再找出他在这一组的哪个位置

拿到了12分有一部分运行超时了

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;

ll sum[N];
int n;

ll totalsum(ll k)
{
	return k*(k+1)*(k+2)/6;
} 

ll jisuan(ll x)
{
	if(x==0)return 0;
	ll i=1;
	while(i*(i+1)/2<x)
	{
		i++;
	}
	//在第i组
	ll prelen=(i-1)*i/2;
	ll curx=x-prelen;
	return totalsum(i-1)+curx*(curx+1)/2; 
}

int main()
{
	cin>>n;
	while(n--)
	{
		ll x,y;
		cin>>x>>y;
		cout<<jisuan(y)-jisuan(x-1)<<endl;
	}
	return 0;
}

第七题0异或变换 - 蓝桥云课

同样也是直接模拟--》但是会超时(拿到12分)

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=10010;
string s;
int n;
long long t;

int main()
{
	cin>>n>>t;
	cin>>s;
	while(t--)
	{
		string old=s; 
		for(int i=1;i<n;i++)
		{
			s[i]=(old[i-1]==old[i])?'0':'1'; 
		}
	}
	cout<<s<<endl;
	return 0; 
} 

第八题0二进制问题 - 蓝桥云课

暴力解决--》直接就是枚举1-n当中符合条件的,这样肯定会运行超时--》拿到10分

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const ll N=1e18;
ll n;
int k;

int jisuan(ll x)
{
	int cnt=0;
	while(x)
	{
		cnt+=(x&1);
		x>>=1;
	}
	return cnt;
}

int main()
{
	cin>>n>>k;
	int ans=0;
	for(ll i=1;i<=n;i++)
	{
		if(jisuan(i)==k)
		{
			ans++;
		}
	}
	cout<<ans<<endl;
	return 0;
}

第九题0翻转括号序列 - 蓝桥云课

直接模拟暴力解决--》一开始我以为暴力过不了的,结果过了

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack> 
using namespace std;
const int N=1000010;
int n,m;
string s;

void op1(int l,int r)
{
	for(int i=l-1;i<=r-1;i++)
	{
		if(s[i]=='(')s[i]=')';
		else s[i]='(';
	}
}

int op2(int l)
{
	int L=l-1;
	int balance=0;
	int maxR=0;
	
	for(int i=L;i<n;i++)
	{
		if(s[i]=='(')balance++;
		else balance--;
		if(balance<0)break; 
		if(balance==0)maxR=i+1;
	}
	return maxR;
}

int main()
{
	cin>>n>>m;
	cin>>s;
	while(m--)
	{
		int op;
		int l,r;
		cin>>op;
		if(op==1)
		{
			cin>>l>>r;
			op1(l,r);
		}
		if(op==2)
		{
			cin>>l;
			cout<<op2(l)<<endl;
		}
	}
	return 0;
}
 

第十题0异或三角 - 蓝桥云课

dfs枚举(暴力解决)5分

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1000010;
int T;
int n;
int ans=0;
int path[4];

bool check()
{
	int a=path[1],b=path[2],c=path[3];
	if (a > b) swap(a, b);
    if (a > c) swap(a, c);
    if (b > c) swap(b, c);
    // 三角形条件
    return a + b > c;
}

void dfs(int x,int start)
{
	if(x>3)
	{
		if((path[1]^path[2]^path[3])==0)
		{
			if(check())
			{
				int a=path[1],b=path[2],c=path[3];
				if(a==b&&b==c)ans+=1;
				else if(a==b||b==c||a==c)ans+=3;
				else ans+=6; 
			} 
		}
		return;
	}
	for(int i=start;i<=n;i++)
	{
		path[x]=i;
		dfs(x+1,i);
	}
}

int main()
{
	cin>>T; 
	while(T--)
	{
		cin>>n;
		ans=0;
		dfs(1,1);
		cout<<ans<<endl;
	}
	return 0;
} 
相关推荐
手写码匠1 小时前
手写 AI Prompt Injection 防护系统:从零实现 LLM 安全边界
人工智能·深度学习·算法·aigc
薇茗1 小时前
【初阶数据结构】 升沉有序的平仄 排序
c语言·数据结构·算法·排序算法
_深海凉_1 小时前
LeetCode热题100-对称二叉树
算法·leetcode·职场和发展
瑞华丽PLM1 小时前
瑞华丽工业软件研发效能全景展示
人工智能·算法·cae·工业软件·国产软件·瑞华丽plm·瑞华丽
运筹vivo@1 小时前
两数之和(leetcode)
算法·leetcode·职场和发展
吃好睡好便好1 小时前
在Matlab中绘制二维等高线图
开发语言·人工智能·学习·算法·matlab
Mr_pyx2 小时前
LeetCode Hot 100 - 最长递增子序列完全题解
算法·leetcode·职场和发展
Mr_pyx2 小时前
LeetCode Hot 100 - 爬楼梯完全题解
算法·动态规划
z200509302 小时前
今日算法: 二叉搜索树
算法