2019 蓝桥杯 A组题目解析

试题A:平方和

【问题描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574,平方和是 14362。注意,平方和是指将每个数分别平方后求和。
请问,在 1 到 2019 中,所有这样的数的平方和是多少?

#include<iostream>
using namespace std;
int num[4] = {1,2,0,9};
int isIn(int value){//拆分后的个位数int sub;//拆分while (value){//得到当前整数 尾位数sub = value % 10;//切割这一整形value /= 10;//输出
//      cout << sub;for(int k = 0;k < 4;k++){if(sub == num[k]){return 1;}}}return 0;
}int check(int value){while(value){if(value % 1 == 0 || value % 2 == 0 || value % 9 == 0 || value % 10 == 0){return true;}}return false;
}
int main(){//终于知道为什么要 long long
//  int result = 0;long long result = 0;for(int i = 1;i <= 2019;i++){if(check(i)){result += i*i;}}cout << result << endl;
}

试题B:数列求值

【问题描述】
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求
第 20190324 项的最后 4 位数字。

#include <iostream>
using namespace std;
//已知项数求前c项
void fibo(int num){int a = 1,b = 1,c;cout << 1 << " " << 1 << " ";for(int i = 3;i <= num;i++){c = a + b;b = a;a = c;cout << c << " ";}cout << endl;// 打印出第10项 cout << c << endl;
}
void prefix_sum(long long int N){long long int a = 1,b = 1,c = 1;long long int d;cout << a << " " << b << " " << c << " ";for(int i=4;i <= N;i++){d = (a+b+c) % 10000;a = b;b = c;c = d;cout << d << " ";}cout << endl;//打印出第10项 cout<< d <<endl;
}
void prefix_sum2(long long int target){long long int a = 1,b = 1,c = 1;long long int d;long long index;if (target == 1){cout << 1;}index = 3;while(d <= target){d = (a+b+c) % 10000;a = b;b = c;c = d;index ++;if(d == target){break;}}cout << index << endl;
}
int main()
{fibo(10);prefix_sum(10);prefix_sum2(105);return 0;
}

顺便复习一下斐波那契数列

试题C:最大降雨量

#include<iostream>
#include<algorithm>
using namespace std;
//  建立7*7二维数组
//  从左到右严格递增
//  使每行中位数从上到下严格递增
//  得出该二维数组中位数右下角均为比它大的数
//  则中位数最大值为49-16+1
int main(){cout << 49 - 16 + 1 << endl;return 0;
}

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

【问题描述】
给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 A1, A2, · · · AN
现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是 1。
【输入格式】
第一行包含一个整数 N。
第二行包含 N 个整数 A1, A2, · · · AN 。
【输出格式】
输出一个整数代表答案。
【样例输入】
7
1 6 5 4 3 2 1

【样例输出】
2

#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
int N;
void print(vector<int>arr,int n){for(int i = 1;i < n;i++){cout << arr[i] << " ";}cout << endl;
}
int main(){cin >> N;int arr[N+1];for(int i = 1;i <= N;i++){cin >> arr[i]; }int p = 1;vector<int>res(20);for(int i = 1;i <= N;i++){if(i >= pow(2,p)){p++;}res[p] += arr[i];}int max_v = res[1],Min=1;for(int i=1;i<=temp;i++){if(res[i]>max_v){Min=i;max_v=res[i];}}//打印中间res数组看下print(res,4);cout << Min << endl;return 0;
}

试题 G: 外卖店优先级

【问题描述】
“饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有一个优先级,初始时 (0 时刻) 优先级都为 0。
每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。
如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果优先级小于等于 3,则会被清除出优先缓存。
给定 T 时刻以内的 M 条订单信息,请你计算 T 时刻时有多少外卖店在优先缓存中。
【输入格式】
第一行包含 3 个整数 N、M 和 T 。
以下 M 行每行包含两个整数 ts 和 id,表示 ts 时刻编号 id 的外卖店收到一个订单。
【输出格式】
输出一个整数代表答案。
【样例输入】
2 6 6
1 1
5 2
3 1
6 2
2 1
6 2

【样例输出】
1

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005;
//构建订单结构体
struct order{int ts;int id;order(int t,int i){this->ts = t;this->id = i;}bool operator <(const order& rhs) const{return rhs.ts < ts;}
};
int N,M,T,ts,id;
int sum[maxn],book[maxn];
int main(){//优先队列,根据订单的时间出队priority_queue<order> q;cin >> N >> M >> T;while(M--){cin >> ts >> id;q.push(order(ts,id));}int ans = 0;while(!q.empty()){order temp = q.top();q.pop();id = temp.id;cout << temp.ts << " " << temp.id << endl;for(int i = 1;i <= N;i++){if (i == id) continue;// 对于每一个不是 id 的 店铺  sum[id] -= 1; if (sum[i] > 0) sum[i]--;// 如果已经入优先缓存,并且优先级 <= 3 则 提出优先缓存if (sum[i] <= 3 && book[i]){book[i] = 0;ans--;}}sum[id] += 2;//如果没有进入优先缓存,并且优先级>5if(!book[id]&& sum[id] > 5){book[id] = 1;ans++;}}for(int j = 1;j <= 2;j++){cout << sum[j] << " ";}cout << endl;for(int j = 1;j <= 2;j++){cout << book[id] << " ";}cout << endl;cout << ans << endl;return 0;
}

试题 H: 修改数组

【问题描述】
给定一个长度为 N 的数组 A = [A1, A2, · · · AN],数组中有可能有重复出现的整数。
现在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改
A2, A3, · · · , AN。
当修改 Ai 时,小明会检查 Ai 是否在 A1 ∼ Ai−1 中出现过。如果出现过,则小明会给 Ai 加上 1 ;如果新的 Ai 仍在之前出现过,小明会持续给 Ai 加 1 ,直到 Ai 没有在 A1 ∼ Ai−1 中出现过。
当 AN 也经过上述修改之后,显然 A 数组中就没有重复的整数了。现在给定初始的 A 数组,请你计算出最终的 A 数组。
【输入格式】
第一行包含一个整数 N。
第二行包含 N 个整数 A1, A2, · · · , AN 。
【输出格式】
输出 N 个整数,依次是最终的 A1, A2, · · · , AN。
【样例输入】
5
2 1 1 3 4
【样例输出】
2 1 3 4 5

int main(){int N;cin >> N;set<int> s;vector<int>arr;while(N--){cin >> x;while(s.count(x)) x++;s.insert(x);arr.push_back(x); }for(int i = 0;i < arr.size();i++){cout << arr[i] << " ";}return 0;}
int main(){unordered_map<int,int>map;vector<int>arr; long long int N,x;cin >> N;while(N--){cin >> x;while(map[x]) x++;map[x]++;arr.push_back(x); }for(int i = 0;i < arr.size();i++){cout << arr[i] << " ";}return 0;
}

第I题:糖果

【问题描述】
糖果店的老板一共有 M 种口味的糖果出售。为了方便描述,我们将 M 种口味编号 1 ~ M。
小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售。
幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味。
给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果。

【输入格式】
第一行包含三个整数 N、M 和 K。
接下来 N 行每行 K 这整数 T1, T2, · · · , TK,代表一包糖果的口味。
【输出格式】
一个整数表示答案。如果小明无法品尝所有口味,输出 ?1。
【样例输入】
6 5 3
1 1 2
1 2 3
1 1 3
2 3 5
5 4 2
5 1 2
【样例输出】
2
思路:
显然的状压 dpdpdp +滚动数组
dp(i,j)dp(i,j)dp(i,j)d p ( i , j ) dp(i,j)dp(i,j)dp(i,j)dp(i,j)dp(i,j)表示前iii个数字组成j状态需要选择的最少糖果集数。
dp(i,j∣a[i])=min(dp(i−1,j∣a[i]),j)+1))dp(i,j|a[i])=min(dp(i-1,j|a[i]),j)+1))dp(i,j∣a[i])=min(dp(i−1,j∣a[i]),j)+1))

#include<bits/stdc++.h>
using namespace std;
const int maxn = (1<<20) +52;
const int inf = 1000;
int a[505], n, m, k, dp[2][maxn];int min(int a, int b){return  a < b ? a:b;
}
int min(int a,int b,int c){return min(min(a,b),c);
}
void print(int N){for(int i = 0;i < 2;i++){for(int j = 0;j < N;j++){cout << dp[i][j] << " ";} cout << endl << "*******************************" <<endl;}
}
int main(){scanf("%d%d%d",&n,&m,&k);int e=1<<m;//输入for(int i=1;i<=n;i++){a[i]=0;for(int j=0;j<k;j++){int temp;scanf("%d",&temp);a[i]= a[i] | 1<<(temp-1);//当temp为 3时 即是 8所 以要先减一才对应得到 100//当temp为 4时 即是 16 所以要先减一才对应得到 1000// 100 | 1000 得到 1100 }}//初始化for(int i=0;i<maxn;i++){dp[0][i]=dp[1][i] = inf;}dp[0][0]=0;//递推dpbool pos=1;for(int i=1;i<=n;i++,pos=!pos){for(int j=0;j<e;j++){dp[pos][j]=dp[!pos][j];}for(int j=0;j<e;j++){//          cout << dp[!pos][j|a[i]] << " " << dp[!pos][j]+1 << endl;
//          还要和自己比较,是因为在迭代的过程中会覆盖调已经修改的值
//          j = 0, dp[pos][j|a[i]] = 1
//          j = 1, dp[pos][j|a[i]] = inf
//          因此会发生覆盖 dp[pos][j|a[i]]= min(dp[!pos][j|a[i]],dp[pos][j|a[i]],dp[!pos][j]+1);
//            cout << dp[pos][j|a[i]] << endl;}print(e);}//输出答案if(dp[!pos][e-1]==inf){printf("-1\n");}else  printf("%d\n",dp[!pos][e-1]);return 0;
}

2019蓝桥杯A组C++题目相关推荐

  1. 2019蓝桥杯B组C++省赛题目及感受

    2019年第十届蓝桥杯大赛软件类省赛C/C++大学B组 试题 A:组队 本题总分:5分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员, 组成球队的首发阵容. 每位球 ...

  2. 2019蓝桥杯B组省赛反思总结

    赛后感想 上周日(3月24日)蓝桥杯拉下帷幕,可惜未能如愿进入国赛,想想还是挺难受的.自己搞算法毕竟也搞了有一段时间了,不敢说怎么样,自己也懂,刷题和训练什么的也坚持下来了.这次失利还是有很多个人因素 ...

  3. 2019蓝桥杯A组:平方和(枚举,筛选)

    一.题目:平方和 题目描述 小明对数位中含有2.0.1.9 的数字很感兴趣,在1 到40 中这样的数包 括1.2.9.10 至32.39 和40,共28 个,他们的和是574,平方和是14362. 注 ...

  4. 2019蓝桥杯B组:完全二叉树权值

    五.题目:完全二叉树权值 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下.从左到右的顺序依次是 A1, A2, · · · An 现在小明要把相同深度的节点的权值加在一起 ...

  5. 2019蓝桥杯A组:数列求值(递推式)

    三.题目:数列求值 给定数列 1, 1, 1, 3, 5, 9, 17, -,从第 4 项开始,每项都是前 3 项的和.求 第 20190324 项的最后 4 位数字. [答案提交] 这是一道结果填空 ...

  6. 2019蓝桥杯B组省赛 J.灵能传输

    J.灵能传输: 是有几个难点的, 题意: n个数, 每次操作可以使 ai−1+=ai , ai−=2ai , ai+1+=ai, 问操作之后 |ai| 的最大值最小是多少 题解: 此题有三个难点:前缀 ...

  7. 蓝桥杯python组——卡片(卡牌大师。。)

    蓝桥杯python组--卡片 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9. 小蓝准备用这些卡片来拼一些数,他 ...

  8. 计蒜客2019蓝桥杯省赛B组模拟赛(一)题目及解析

    蓝桥杯历年真题题目及题解目录汇总   A. 结果填空:钟表 题库链接 分值: 5 一天蒜头君 22:28:45 开始睡觉,06:24:26 醒来之后,蒜头君在想,今天我睡了多久? 请你告诉蒜头君睡了& ...

  9. 2019 蓝桥杯 C/C++实现 B组国赛

    2019 蓝桥杯 C/C++实现 B组国赛 题目列表 A:平方序列 B:质数拆分 C:拼接 D:求值 E:路径计数 F:最优包含 G:排列数 H:解谜游戏 I:第八大奇迹 J:燃烧权杖 A:平方序列 ...

最新文章

  1. vbyone接口引脚定义_一文了解A、B、C、D、E 5 种HDMI接口类型!网友:今天总算明白了...
  2. C++继承机制下的析构函数
  3. 遗传算法实例-求解函数极值
  4. websphere、weblogic上JConsole的配置
  5. 拿下编程界的奥林匹克世界冠军,22岁的她加入了华为
  6. 编译log4cplus-2.0.x备忘录
  7. django通用视图(类方法)
  8. Mysql insert without auto-increase when duplicate
  9. 剖析 |数据现代化-富国银行的数据转型之路
  10. 思维导图案例之VeritasDCG
  11. 删除进程 linux,linux批量删除进程
  12. 如何制作SDTM Define- 1. 指导原则
  13. 努比亚计科学计算机,努比亚Z系列迎来迭代新机,Geekbench跑分出炉,预计春节后发布...
  14. sublime报错信息乱码_Sublime如何解决中文乱码问题
  15. 巨人网络18年春招java答案_巨人网络18春招Java开发笔试题,希望对大家能有帮助...
  16. “百度杯”CTF比赛 九月场--web Upload
  17. Flight_Simulator(DHC-2‘Beaver’aircraft )
  18. 简单的登录注册连接数据库
  19. 安卓一键清理内存_【安卓】手机垃圾清理,拯救内存空间
  20. 中冠百年|不同年龄阶段家庭资产配置思路

热门文章

  1. word中设置论文参考文献完美对齐方法
  2. 苹果手机把游戏藏在计算机,15个苹果手机的隐藏功能,不看你手机就白买了!...
  3. Python循环的嵌套
  4. python遍历数组的两种方法加条件输出数组的值
  5. 模电multisim的1.6.1的例题实验演示
  6. codeforces 1783 C. Yet Another Tournament
  7. SDRAM - 一个简单的存储控制器
  8. 统计学习方法 -半监督学习
  9. php中mysql_query是什么意思_php中mysql_query是什么意思?
  10. 粤嵌GEC6818,基于LVGL和mplayer的音视频播放器