首页 > 其他分享 >蓝桥杯补题

蓝桥杯补题

时间:2024-05-30 18:34:51浏览次数:12  
标签:typedef return int long 蓝桥 solve 补题 define

知识点模块

1.x=(y2-z2),x=(y-z)*(y+z);说明x由两个奇偶性相同的数相乘而得
令y-z=a,y+z=b,消元一下得出2*y=(a+b),因为y为整数,所以a+b为偶数,所以a和b的奇偶性肯定是相同的
2.一个数由两个偶数相乘而得到
那么它一定是4的倍数

题解模块

P8635 [蓝桥杯 2016 省 AB] 四平方和
这题做过两次了,还有3个点超时,注意一下三层循环里要把i那层写成i * i<n,把j那层写成i*i+j * j<n,把k那层写成i * i+j * j +k * k<n

点击查看代码
#include <bits/stdc++.h>
using namespace std;
void solve()
{
	int n;
	cin>>n;
	for(int i=0;i*i<n;i++)
	{
		for(int j=i;i*i+j*j<n;j++)
		{
			for(int k=j;i*i+j*j+k*k<n;k++)
			{
				int m=n-i*i-j*j-k*k;
				int h=(int)sqrt(m);
				if(h*h==m){
					cout<<i<<" "<<j<<" "<<k<<" "<<h;
					return ;
				}
			}
		}
	}
	
}
int main()
{
	int t=1;
	while(t--)
	{
		solve();
	}
	return 0;
}

P9231 [蓝桥杯 2023 省 A] 平方差
1.其实我们做题总是倾向于按照题目给的思路来,但真正的做题不是这样的,这就考察我们的思维和思考角度了这一题,具体看知识点1。
2.根据知识点1,我们可以得知当x为奇数时,x由1和它本身相乘而得,当x为偶数时,它由两个偶数构成,一个数的两个质因数都是偶数,那么这个数就是4的倍数
3.所以答案就是l和r之间,奇数的个数+4的倍数的个数

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long 
typedef pair<int,int> pii;
#define all(v) v.begin(),v.end()
typedef long long ll;
int j(int x)
{
	if(!x) return 0;
	else return (x+1)/2;
}

int o(int x)
{
	return x/4;
}



void solve()
{
	int l,r;
	cin>>l>>r;
	cout<<j(r)-j(l-1)+o(r)-o(l-1);

}
signed main()
{
	int t=1;
	//cin>>t;
	while(t-- ) solve();
	return 0;
}

P8605 [蓝桥杯 2013 国 AC] 网络寻路
1.先把每个点连接的图,画出来,每个点和多少个其他的点连接称为节点的度,联通的点固定一下路径,然后看这两个节点所连的其他节点有哪些,尝试枚举一下,其实其他节点就是度数-1。

2.以这个图为例子,我们固定1-2,那么与1连接的点有除2以外的3,4;那么则有4->1->2->3 , 4->1->3->2,那么实际上这样的路径就有(u的度数-1 * v的度数-1),由于是可以双向的,所以还要×2
3.所以开三个数组,d,u,v存度数,和每次的路线的两个点,然后按照上面公式算结果即可

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long 
typedef pair<int,int> pii;
#define all(v) v.begin(),v.end()
typedef long long ll;
int p[1005];

void solve()
{
	int n,m;
	cin>>n>>m;
	int d[10005]={0},u[100005]={0},v[100005]={0};
	for(int i=1;i<=m;i++){
		cin>>u[i]>>v[i];
		d[u[i]]++;
		d[v[i]]++;
	}
	int ans=0;
	for(int i=1;i<=m;i++)
	{
		ans+=(d[u[i]]-1)*(d[v[i]]-1)*2;
	}
	cout<<ans;
}
signed main()
{
	int t=1;
	//cin>>t;
	while(t-- ) solve();
	return 0;
}

P8604 [蓝桥杯 2013 国 C] 危险系数
1.要找关键点,其实一个点到另一个点的关键点,可以通过这个点被经过的次数,和总路径的次数比较,如果是相等的,那么就是关键点,可以画图出来理解
2.第一种方法就是简单的dfs遍历,寻找u和v间的总路径数,并统计每个点走过的次数,但是如果不会敲dfs就写不出来
3.第二种方法,是我的天才队友想出来的,可以通过并查集来解决,思路大概就是每次删除一个点以后,重新对所有的点找最终的父亲,如果说这个点被删了导致u和v的父亲不一样,那么这个点就是关键点,也就是删除点后再检查联通性

dfs的写法

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long 
typedef pair<int,int> pii;
#define all(v) v.begin(),v.end()
typedef long long ll;
int n,m,u,v,a[1005][1005],ans,sum;
int cnt[1005];
bool st[1005];
void dfs(int x)//x代表遍历的深度 
{
	if(x==v)
	{
		sum++;
		for(int i=1;i<=n;i++) if(st[i]) cnt[i]++;
	}else{
		
		for(int i=1;i<=n;i++)
		{
			if(a[x][i]==1&&!st[i])
			{
				st[i]=1;
				dfs(i);//搜索这个通的点 
				st[i]=0;
				
			}
		}
	}
}

void solve()
{
	
	cin>>n>>m;
	while(m--)
	{
		cin>>u>>v;
		a[u][v]=a[v][u]=1;
	}
	
	cin>>u>>v;
	dfs(u);
	if(sum>0){
		for(int i=1;i<=n;i++)
		{
			if(cnt[i]==sum) ans++;
		}
		cout<<ans-1;
	}else cout<<-1;
	
}
signed main()
{
	int t=1;
	//cin>>t;
	while(t-- ) solve();
	return 0;
}

并查集的写法

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long 
typedef pair<int,int> pii;
#define all(v) v.begin(),v.end()
typedef long long ll;
int n,m,ans;
int p[1005];
pii a[1005];
int find(int x)
{
	return  p[x]==x?x:p[x]=find(p[x]);
}

void solve()
{
	//点是1 2 3 4 5 不是我们输入这个点对哈 不要理解成点对 
	cin>>n>>m;

	for(int i=1;i<=m;i++)
	{
		cin>>a[i].first>>a[i].second;
	}
	int u,v;
	cin>>u>>v;
	for(int i=1;i<=n;i++)
	{
		iota(p,p+n+1,0);
		if(i==u||i==v) continue;
		
		for(int j=1;j<=m;j++){
			if(a[j].first==i||a[j].second==i) continue;//这个就是删除操作 
			int xx=find(a[j].first),yy=find(a[j].second);
			p[xx]=yy;
		}
		//上面删完枚举的点以后 重新找了u和v的父亲
		//删完以后如果u和v的父亲不一样了就是不联通了 
		if(find(u)!=find(v)) ans++;
		
	}
	cout<<ans;
}
signed main()
{
	int t=1;
	//cin>>t;
	while(t-- ) solve();
	return 0;
}

标签:typedef,return,int,long,蓝桥,solve,补题,define
From: https://www.cnblogs.com/swjswjswj/p/18212990

相关文章

  • 2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 (vp + 补题
    比赛主页:https://ac.nowcoder.com/acm/contest/52244AXorBProblem思路:如果i!=j代表(i,j)&(j,i)是两对,也就是说如果i==j代表只有一对,综上得出公式cnt[i]*cnt[i]的累加就是我要的答案Code:#include<bits/stdc++.h>usingnamespacestd;typedeflo......
  • 洛谷 P8725 [蓝桥杯 2020 省 AB3] 画中漂流 的题解
    题目大意传送门思路考虑使用时空复杂度为O(tm)O(tm)......
  • 洛谷 P8614 [蓝桥杯 2014 省 A] 波动数列 的题解
    题目大意求满足和为sss且ti=......
  • 蓝桥杯-AB路线(详细原创)
    问题描述:有一个由N×M个方格组成的迷宫,每个方格写有一个字母A或者B。小蓝站在迷宫左上角的方格,目标是走到右下角的方格。他每一步可以移动到上下左右相邻的方格去。由于特殊的原因,小蓝的路线必须先走K个A格子、再走K个B格子、再走K个A格子、再走K个B格子......
  • 第14届蓝桥杯B组国赛
    子2023#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;voidsolve(){ vector<int>Q; for(inti=1;i<=2023;++i){ intx=i; vector<int>tmp; while(x){ inty=x%10; if(y==2||y==0|......
  • 蓝桥杯嵌入式 第六届国赛 更新中……
    题目配置注意事项复制LCD的工程,先配置资源---勾选完选项一定要再看一眼,可能选择错误ADC:配置ADC2_IN15,对应PB15引脚EEROM,配置PB6和PB7按键输入模式PB0、PB1、PB2、PA0LED一定要使能PD2PWM互补输出,用TIM15TIM6-10ms基准定时器代码-默写大师先......
  • ICPC训练赛补题集
    ICPC训练赛补题集文章目录ICPC训练赛补题集D-FastandFat(负重越野)I-路径规划G.Inscryption(邪恶铭刻)D-FastandFat(负重越野)原题链接:原题链接题意:体重大的背体重小的速度不变,体重小的背体重大的速度会变化,变化......
  • 免费,Python蓝桥杯等级考试真题--第13级(含答案解析和代码)
    Python蓝桥杯等级考试真题–第13级一、选择题答案:C解析:正向下标由0开始,下标3代表第四个元素,故答案为C。答案:A解析:range(0,4)的取前不取后,元组的符号是小括号,故答案为A。答案:C解析:Cherry所在的位置为下标2,故答案为C。二、编程题【参考程序】a=input()b=a.split......
  • 2024 蓝桥杯省赛游记
    Day-inf看了眼去年的题,一个插头dp一个杜教筛,恐怖如斯群里问了句发现hkhmtr也参加Day1完全没压力所以随便玩了。开场扫了一眼只有8道题,有个树上莫队?T1赛后看知乎好像能直接拿excel生成字符串形式的日期T2一开始没注意白棋一定有13个子,跑完了再看题才想到,提答的......
  • 《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学
    背景:有些同学在大一或者大二可能会被老师建议参加蓝桥杯,本视频和文章主要是以一个过来人的身份来给与大家一些思路。比如蓝桥杯是什么?我是否要参加蓝桥杯?参加蓝桥杯该选择何种语言?如何科学备赛?等问题进行一个经验分享视频地址:【240526晚21点56分更新视频地址完毕】《拯救......