蓝桥杯一些做题思维

拼数

几数拼在一起 返回最大整数 采用字符串拼接的办法 定义类型为字符型
cmp函数 return a+b>b+a 注意cmp函数是bool类型

怎么统计数字出现次数

先排序,再依次遍历,如果后一个与前一个数字相同,cnt++.不同 就输出相应的个数

未知数据个数

while(scnaf("%d",%a[i])!=EOF){
      i++; //i计算个数
}

停止输入的时候用 同时嗯ctrl+z 屏幕黑框中出现Z时按回车
就可以停止输入.!

排列 逐渐输出比自己大的数

next_permutation()函数
逐渐生成比现在排列大的

对字符串 字符串数组 和排列的想法

当确切知道几个数是 或者 有 字符串等于的运算时 用string a,b,c不用数组

//等于 string a,b,c;
  a=b; //直接写等于
//排列
next_permutation(a.begin(),a.end());
数组的写法
string a[100];
next_permutation(a,a+100)

int 把浮点数转化为小数 二分法

小数后面自动省略 不会四舍五入

关于二分法向上取整还是向下取整的问题

小经验 当题目要求取最大值的时候 向上取整
当题目要求取最小值的时候 向下取整
具体情况具体分析
详情请点击

最小值最大化/最大值最小化

在所有情况获得的最小值中取一个最大的/
二分法找一个最大值 / 二分法找一个最小值

实数二分的精度问题
eps实际上决定了二分的次数。例如区间长度为 1​ ,要达到 eps=0.001的精度,那么共二分 10次,就能达到 1/(2的10次方)
=0.001​​ 的精度
在这里插入图片描述
二分一次的意思:把区间长度为1 ,折一半---->二分一次
再折一半—>二分两次

for (int i=-100;i<100;i++){ //题目说「根与根之差的绝对值≥1”,分为200个小区间
        double left = i, right =i+1;
        double y1 = y(left), y2 = y(right);
        if(y1 == 0) printf("%.2lf ",left); //判断左端点。一个小坑
        if(y1*y2 < 0){                     //小区间内有根
           for(int j = 0; j<100; j++){     //在小区间内二分
                double mid=(left+right)/2;
                if(y(mid)*y(right) <= 0)
                   left = mid;
                else
                   right = mid;
            }
            printf("%.2lf ",right);
        }

广度优先搜索
当题目中要输出搜索次数是 可以把次数和坐标放在同一个结构体中

queue<node> q;

求最短路径问题

图的最短路径
数据范围大:dijkstra算法
数据范围小:floyd算法

#include<bits/stdc++.h>
using namespace std;
const int N = 5e2+10;
int dis[N][N];
void floyd(int n){
	for(int k=1;k<=n;k++)//中间值
	for(int i=1;i<=n;i++) //一共有n个数 
	for(int j=1;j<=n;j++) 
	dis[i][j] = min (dis[i][j],dis[i][k]+dis[k][j]);//算法核心!!!
}
int main(){
	int n,m,q,inf=1e15;
	cin>>n>>m>>q;
	memset(dis,0x3f,sizeof(dis));
	//赋值给dis数组 
	for(int i=1;i<=m;i++){
		int u,v,w; 
		cin >> u >> v >> w;
		dis[u][v] = dis[v][u] = min(dis[u][v],w);
	}
	for(int i=1;i<=n;i++)  dis[i][i]=0;
	floyd(n); 
	while(q--){
		int u,v;
		cin >> u >> v;
		if(dis[u][v] > inf) cout<<-1<<endl;
		else cout<<dis[u][v]<<endl;
	}
	
	return 0;	
}

最小生成树适合解决什么问题?

最小生成树:都联通且不能有环

一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的。

最小生成树用来解决什么问题?

就是用来解决如何用最小的“代价”用N-1条边连接N个点的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值