1.读题

不要放过任何一个细节 这对规避一些问题以及寻找思路有很大的帮助

例题:作为篮球队教练,你需要从名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。
每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?

编号1~20为球员,后面紧跟的5个数值是其在5个位置的表现,一个球员只能担任一个位置,所以在选取该球员时应该综合考虑,如17号很出色在1 3 4 号位都为最高分,但综合考虑 应该让其担任3号位,因为17号3号位分数最好。

此题可以通过观察与口算得出:

97(1)+99(10/20) + 99(17)+97(15)+98(18/12)

490

当然仔细观察还有更多的解法,此题只是想说明读题的重要性

2.理清楚思路

想清楚用什么知识点,将步骤一步步写出来

例题:

试题 G: 完全二叉树的权值

时间限制: 1.0s 内存限制: 256.0MB

本题总分:20 分

【问题描述】

给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A 1 , A 2 , ··· A N ,如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。 注:根的深度是 1。

【输入格式】

第一行包含一个整数 N。

第二行包含 N 个整数 A 1 , A 2 , ··· A N 。

【输出格式】

输出一个整数代表答案。

【样例输入】

7 1 6 5 4 3 2 1

【样例输出】

2

【评测用例规模与约定】

对于所有评测用例,1 ≤ N ≤ 100000,−100000 ≤ A i ≤ 100000。

知识点:

完全二叉树第i层的最大节点数为2^(i-1)

深度为 n 的完全二叉树最多拥有 2^n - 1 个节点

层数为17的完全二叉树最多拥有2^17-1=131071个结点,题目要求N<=100000

步骤:

  1. 首先肯定是要写出能够代表或者获取树深度的函数 getdeep()
  2. 考虑如何存储权值并计算一层中权值的总和
  3. 对总和进行排序后的输出

代码:

#include<iostream>
using namespace std;
int getdeep(int n){
    int result=0;
    while(n>0){
        n=n/2;
        result++;
    }
    return result;
}
int main(){
    int weight[18]={0},n;
    cin>>n;
    int i=1,quanzhi,max,cengshu=1;
    for(i=1;i<=n;i++){
        int point=getdeep(i);
        scanf("%d",&quanzhi);
        weight[point]+=quanzhi;
        if(i==1){
            max=weight[1];
        }
        if(weight[point]>=max){
            max=weight[point];
            cengshu=point;
        }
    }
    cout<<cengshu<<endl;
    return 0;
}

以上代码仅供参考,可能会超时。

3.及时保存

养成ctrl+s的习惯防止电脑忽然炸了,你也炸了

4.数据试验

(1).代码写好后,先把给的样例放进去试验。

(2).然后自己造数据,尽量造一些特例,如:边界的数据以及 0 1 -1等特殊数据,确保程序不error的情况下结果也要校对正确

(3). 观察每次出结果的时间,有没有比较难受的停顿,如果有,尽量优化的你代码,时间问题也很致命,尽量把数组开在main之外,最好是定长 例如 static int array[20]

5.注意一下

  1. 蓝桥杯和ACM不同,放入代码不会告诉你对错,其实是类似于答卷子,是可以修改的

  2. 前几道题是填空题,有时可以不用写代码解除,可以节省时间

  3. 填代码的填空题可以复制代码到编辑器,然后不停地去试,一般可以试出来

  4. 常考题型有限,最后一周可以针对性练习一下:

    搜索 枚举 模拟 递归 数学问题 动态规划 贪心 二分 DFS BFS 图 树

6.常用头文件

使用头文件让你解题更快更舒服

#include<stdio.h>    //输入输出
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include<String.h>
#include<vector>
#include<queue>
#include<stack>
#include<time.h>

#include<stdlib.h>

bsearch()函数用法

#include <iostream>
#include <stdlib.h>
using namespace std; 
int cmpfunc(const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}

int values[] = { 5, 20, 29, 32, 63 };

int main ()
{
   int *item;
   int key = 3;

   /* 使用 bsearch() 在数组中查找值 32 */
   item = (int*) bsearch (&key, values, 5, sizeof (int), cmpfunc);
   if( item != NULL ) 
   {
      printf("Found item = %d\n", *item);
   }
   else 
   {
      printf("Item = %d could not be found\n", key);
   }

   return(0);
}

free() malloc() realloc()

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char *str;

   /* 最初的内存分配 */
   str = (char *) malloc(15);
   strcpy(str, "runoob");
   printf("String = %s,  Address = %p\n", str, str);

   /* 重新分配内存 */
   str = (char *) realloc(str, 25);
   strcat(str, ".com");
   printf("String = %s,  Address = %p\n", str, str);

   /* 释放已分配的内存 */
   free(str);

   return(0);
}

abs() 取绝对值

#include<string.h>

char *strcat(char *dest, const char *src)

src 所指向的字符串追加到 dest 所指向的字符串的结尾。

int strcmp(const char *str1, const char *str2)

str1 所指向的字符串和 str2 所指向的字符串进行比较。

char *strcpy(char *dest, const char *src)

src 所指向的字符串复制到 dest

#include<math.h>

double pow(double x, double y)
返回 x 的 y 次幂。

double sqrt(double x)

返回 x 的平方根。

#include<algorithm>

sort 快速排序

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool myfunction(int i,int j){
    return(i<j);
}
int main(){
    int array[]={32,71,12,45,26,80,53,33};
    vector<int> myarray (array,array+8);
    sort(myarray.begin(),myarray.end(),myfunction);
    int i=0;
    for(i;i<8;i++){
        cout<<myarray[i]<<" ";
    }
} 

7.玩一玩矩阵

矩阵的转置

题目:给出n×m的整数矩阵,请你把这个矩阵顺时针旋转90°后输出

输入格式

第一行输入两个整数n,m(1≤n,m≤200),用空格隔开。

接下来n行,每行输入m个整数,表示输入的矩阵,矩阵中元素都是int范围内的整数。

输出格式:

输入m行,每行n个空格隔开的整数,表示旋转后的矩阵。注意:每行末尾不能输出多余的空格

样例输入:

3 4
-1 3 6 3
7 7 9 1
10 3 4 6

样例输出:

10 7 -1
3 7 3
4 9 6
6 1 3

蓝桥杯     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!