0
点赞
收藏
分享

微信扫一扫

蓝桥杯 学习总结2022

你的益达233 2022-04-13 阅读 48

1.取值范围

在这里插入图片描述

2. 字符串

取长度
String s 可以使用s.size() | s.length() 取得长度
char s[] 可以使用strlen(s) 取得长度
提取字符串:
s.substr(pos, len) ;pos的默认值是0 len默认为pos到最后一个字符的长度
插入字符串
s.insert(pos, str); //pos 起始位置 str 字符串
删除字符串
s1.erase(5); //从第五个位置开始往后面都删除
s1.erase(5, 3); //从第五个位置开始往后面删除3个字符
字符串查找
int index = s1.find(s2,5);

3.输入

在这里插入图片描述
在这里插入图片描述
3.读取桌面文件快速输入

#include <cstdio>
freopen("C:\\Users\\HK\\Desktop\\temp.txt","r",stdin); 

4.求最大公约数GCD 最小公倍数LCM

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

int lcm(int a, int b)
{
 return a * b / gcd(a,b) ; 
 }

5.取余(得正数)

x 对 N 取余,因为x余N 的值必在 -N 和 N之间,这时加上N就必为正数,再取余就是正的余数。

int yu = (x % N + N) % N;

6.闰年计算 时间显示

int mon[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; 
//月份表示mon[i] 表示 i 月
int loop(int x) //求闰年 如果是闰年直接返回 1 让二月份加 1 即可
{
    int y = 0;
    if(x % 4 ==0 && x % 100 != 0 || x % 400 == 0) y = 1;
    return y;
}
//时间显示 时间戳化成时间
    const LL day = 86400;
    t /= 1000; // 化成秒
	LL time = t % day; //对天取余
	
	int h = time / 3600;
	int m = (t / 60) % 60;
	int s = time % 60;

EXCEL计算天数

在这里插入图片描述

EXCEL计算星期几

在这里插入图片描述

7.进制转换

#include<bitset>  //转为2进制的头文件 
#include <iostream>
using namespace std;
int main()
{
  int n; cin >> n;
  bitset<8> a(n);
  cout << a << endl;
  return 0;
}

在这里插入图片描述

//十六进制转八进制
long long n;
	cin >> hex >>n;  
	cout << oct <<n ;
	
//十六进制转十进制
   long long a;
	scanf("%x", &a);
  printf("%lld\n",a);

8.全排列 next_permutation(a, a + n)

在这里插入图片描述

9.输出格式

在这里插入图片描述
总结:点前面为 小数点前面有X保留X位 X前面有0就是补零(没有就默认为空格补齐)
点后面就是小数掉保留几位

10.数组复制

//复制st数组到backup数组
memcpy(backup, st, sizeof st);

11.计算阶层

//计算C(a,b)这种阶层的
LL C(int a, int b)   //计算C(a,b)
{
    LL res = 1;
    for(int i = a, j = 1; j <= b; i --, j ++)
    {
        res = res * i / j;
    }
    return res;
}

11.树状数组

//lowbit 返回最低位 1 的值
int lowbit(int x)
{
    return x & -x;
}

void add(int x, int v)  
{
    for (int i = x; i <= n; i += lowbit(i)) tr[i] += v;
}

int query(int x)  //求子数列[a,b]的和 //0 1 3 ,求1~3的和 
{
    int res = 0;
    for (int i = x; i; i -= lowbit(i)) res += tr[i];
    return res;
}

12.排序

#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)  //进行降序排序
{
	return a > b;
}
int main()
{
  int a[]={1,2,5,6,4};
//  sort(a, a + 5, greater<int>()); //降序
//  sort(a, a + 5, less<int>()); //升序
//  sort(a, a + 5)               //升序

  sort(a, a + 5, cmp);//降序

  for(int i = 0; i < 5; i ++) cout << a[i] << " ";
  return 0;
}

13.获取该数二进制表示中1的个数

int get_count(int x)
{
    int res = 0;
    while (x)
    {
        res ++ ;
        x -= x & -x; //x & -x 取最低位 1; x 减去最低位1
    }
    return res;
}

归并排序

//merge_sort(q, 0, n - 1);
void merge_sort(int q[], int l, int r)  // 归并排序
{
    if (l >= r) return;

    int mid = l + r >> 1;
    merge_sort(q, l, mid);
    merge_sort(q, mid + 1, r);

    int k = 0, i = l, j = mid + 1;
    while (i <= mid && j <= r)
        if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];
        else tmp[k ++ ] = q[j ++ ];

    while (i <= mid) tmp[k ++ ] = q[i ++ ];
    while (j <= r) tmp[k ++ ] = q[j ++ ];

    for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}

优先队列,每次取小的进行合并 ---->>原题

priority_queue<int, vector<int>, greater<int>> heap;
//声明 heap 为堆 ,第一个int 为排序判断的数据类型 
    //vector (也就是第二个参数)填写的是来承载底层数据结构堆(heap)的容器
    //第三个参数less-则是对第一个参数的比较类, less表示数字大的优先级越大,
    //而greater表示数字小的优先级越大。

   //heap.push(x);
   //heap.pop();
   //heap.size()

快速排序

//quickSort(1, n);
void quickSort(int l, int r) {
    if (l >= r) return;
    int i = l, j = r, base = a[l]; //base取最左边的数为基准数
    while(i < j) {
        while (a[j] >= base && i < j) j--;
        while (a[i] <= base && i < j) i++;
        if (i < j) swap(a[i], a[j]);
    }
    a[l] = a[i]; a[i] = base; //基准数归位
    quickSort (l, i - 1); //递归左边
    quickSort (i + 1, r); //递归右边
}

13.STL

#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
   // 创建一个向量存储 int
   vector<int> vec;  int i;
   
   // 推入 5 个值到向量中
   for(i = 0; i < 5; i++) vec.push_back(i);

   // 使用迭代器 iterator 访问值
   vector<int>::iterator v = vec.begin();
   while( v != vec.end()) 
   {
      cout << "value of v = " << *v << endl;
      v++;
   }
   return 0;
}
#include<set>
set<pair<double, double> > lines; //可以存放去重的点
lines.insert(pair<double, double>(k, b)) //添加

14.测试数据

  1. 考虑边界情况 极端情况 如为0 为负数等…
  2. 考虑数据的取值范围 需不需要用long long 或unsigned long long
  3. 观察给出的数据规模 有没有坑 如从0 或 负 价值,
  4. 数据量大的情况下 太多的递归可能会超时
  5. 输出结果后记得及时返回
  6. 行列for循环 i j n m 看看有没有写错
举报

相关推荐

0 条评论