我是比赛链接

A题(huas_sy):清除内奸
思路:

#include <iostream>
using namespace std;int n, x;int main(){cin >> n >> x;int y;for(int i = 0; i < n; i ++){      //  每个数只用一次,不需要开辟额外的空间存储cin >> y;if(x != y) cout << y << ' ';   //  不相等就输出}return 0;
}

B题(the_xin):棒球比赛
思路(the_xin):
比较D在是不是小于v*s或者大于vt

#include<iostream>
using namespace std;
int main(){int n,s,t,d;cin>>n>>s>>t>>d;int sd=n*s;int td=n*t;if(d<sd||d>td)puts("Yes");else puts("No");return 0;
}

C题(the_xin):坏了的键盘
思路1(the_xin):
从左往右遍历整个字符数组(从1开始),累计相同字符的和若其连续相同字符个数为奇数则当前字符键盘必不可能是坏的。

#include<bits/stdc++.h>          // 万能头文件,包含绝大多数常用头文件
using namespace std;
string s;                           // C++提供的字符串变量
int cnt[30];
int main()
{cin >> s;int ans = 26;int len = 1;char ch = s[0];for(int i = 1; i < s.length(); i ++) {if(ch == s[i]) len ++;else {if(len % 2 == 1 && !cnt[ch - 'a']) {ans --;cnt[ch - 'a'] = 1;}len = 1;ch = s[i];}}if(len % 2 == 1 && !cnt[ch - 'a']) ans --;cout << ans;return 0;
}

思路2(huas_sy):
从左至右遍历(从1开始),将每一位分成和前面字符相同与不相同去谈论,若相同则累加,否则判断累计和是否为奇数,奇数则说明当前字符必定为好的,在a数组中标记。最后求a中有多少个没被标记的数。

#include <iostream>
using namespace std;int n, a[30];                       // 全局变量定义后系统自动初始化其为0
string s;                           // C++提供的字符串变量int main(){cin >> s;n = s.length();int ans = 0, sum = 1, x = s[0] - 'a';for(int i = 1; i < n; i ++){if(s[i] == s[i-1]){sum ++;}else {if(sum & 1) a[x] = 1;   // ‘&’ 运算符为位运算符的一种,自行百度其用法,不懂可群里沟通sum = 1;}x = s[i] - 'a';}if(sum & 1) a[x] = 1;for(int i = 0; i < 26; i ++)if(a[i] == 0) ans ++;cout << ans;return 0;
}

D题(huas_sy):干掉小团体
思路(huas_sy):
发现对于每个人的爱好值,其范围是比较小的,完全可以开辟一个数组令其下标范围大于爱好值的取值范围,然后将爱好值对号入座(类似于“桶排序”的思路),最后将无爱好值相同的爱好值顺序打印输出即可。

#include <iostream>using namespace std;int n, a[200009], b[200009];int main(){cin >> n;int x;for(int i = 0; i < n; i ++){cin >> a[i];b[a[i]] ++;}for(int i = 0; i < n; i ++){if(b[a[i]] < 2) cout << a[i] << ' ';}return 0;
}

E题(the_xin):简单的数组
思路(huas_sy):
分别维护前缀最大值和前缀最小值最后答案即为最大值和最小值的差(想想前缀和差值的意义)

#include <iostream>using namespace std;int n;int main(){cin >> n;int a, b, x, sum = 0;a = b = 0;                // 初始化最值为0for(int i = 0; i < n; i ++){cin >> x;sum += x;if(sum < a) a = sum;if(sum > b) b = sum;}cout << b - a;return 0;
}

F题(huas_sy):排位次
思路1(the_xin):
Node结构体中x存的是运动员得分 id表示是第几个运动员
对nodes利用x进行排序后 id为原来询问的顺序
这时候nodes数组存放的是按照得分排序后的结果
数组下标就是他的排名 node[i].id存放第几个运动员在i名
我们可以用数组b来表示 其中第i个元素表示第i个运动员的排名
我们只需要遍历nodes数组 使得b[node[i].id]=i
最后按顺序输出即可

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int N=2e5+10;
struct Node{int x,id;bool operator<(const Node &a )const {           // C++提供的运算符重载,其关键字为: operator     return x>a.x;                               // 重载比较运算符之后 Node 之间的比较仅与 x 字段有关,配合后文的 sort 函数使用           }
}nodes[N];
int b[N];
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&nodes[i].x);                    // x 存储运动员得分nodes[i].id=i;                              // id 存储运动员的位置}sort(nodes+1,nodes+1+n);                        // 由 <algorithm> 头文件提供的一个排序函数 sortfor(int i=1;i<=n;i++){b[nodes[i].id]=i;                           // 第 nodes[i].id 个运动员的名次是 i}for(int i=1;i<=n;i++)printf("%d ",b[i]);return 0;
}

思路2(huas_sy):
将 b 数组初值赋值为 a 数组的下标(绑定)
利用 a 数组的值对 b 数组进行递减排序(排序方法:归并排序;利用 c 数组进行过渡;时间复杂度为O(nlogn) )
通过排序后的 b 数组还原 a 数组中各个位置的名次(此时 b 数组的下标为名次,b 数组的值为该名次运动员被询问的次序)(溯源)

#include <iostream>using namespace std;int n, a[200009], b[200009], c[200009];void fu1(int l, int r, int m){                   // 合并有序区间 [l, r-1] , [r, m]int i, j, coun = 0;for(i = l, j = r; i < r && j <= m; ){if(a[b[i]] > a[b[j]]){                  // 比较时根据下标绑定的 a 进行比较c[coun ++] = b[i];i ++;}else {c[coun ++] = b[j];j ++;}}while(i != r){c[coun ++] = b[i ++];}while(j != m + 1){c[coun ++] = b[j ++];}for(i = l, j = 0; j < coun; j ++, i ++){ // 将排序好的数组赋值回 b 数组b[i] = c[j];}
}
void fu(int l, int r){                          // 对区间 l, r 排序if(l == r) return;int mid = (l + r) / 2;                       // 二分中点fu(l, mid);fu(mid + 1, r);fu1(l, mid + 1, r);                          // 对排序后的两个区间,进行有序合并
}
int main(){cin >> n;int x;for(int i = 0; i < n; i ++){              // 初始化 a,b 数组cin >> a[i];b[i] = i;}fu(0, n - 1);                              // 对 b 数组 0 到 n-1 的位置进行排序for(int i = 0; i < n; i ++){             // 溯源a[b[i]] = i;}for(int i = 0; i < n; i ++)cout << a[i] + 1 << ' ';return 0;
}

感谢观看
对于后续的题目希望大家再接再厉,我们的水平是有限的,若有错误随时联系我们改正。
关于题目和解题思路,均已用小括号标识了提供者;一些初次提到的点也已做注释说明,以后将不再赘述。
最后:网络是个好东西,它庞大的容量足以你在里面找到绝大多数知识,智者会利用它,愚人也会利用它,只是用它做的事情有所不同而已。

2021_HUASACM_寒假周测_1 题解相关推荐

  1. 11.2 22大数据c语言自测3题解

    写在开头: 22大数据c语言自测3(11.02-11.16)进行时长两周.共10题,共12人参与解答,参与率较低.希望同学们趁着现在题目还比较简单,多参与参与. 想和大家分享一个之前在力扣(leetc ...

  2. 保留两位小数除法算式_北师大|五年级上册|第一周周测·小数除法(1)

    北师大·五年级上册·第一周周测·小数除法(1) 一.计算题 3.6÷1.2= 0.72÷0.9= 2.6÷13= 4.8÷0.4= 4.4÷4= 0.78÷6= 7.2÷0.4= 1÷0.25= 5. ...

  3. 0906周测题目一 循环题的答案

    0906周测题目一 循环题的答案 视频 java演练 求五个数的大小和均值 - 西瓜视频 https://www.ixigua.com/6870321176015536648/ 代码 import j ...

  4. 20200922:leetcode35周双周赛题解记录(下)

    leetcode35周双周赛题解记录(下) 题目 思路与算法 代码实现 复杂度分析 题目 3.1590. 使数组和能被 P 整除 4.1591. 奇怪的打印机 II 思路与算法 第三题前缀和衍生题目, ...

  5. 20200920:leetcode35周双周赛题解(上)

    leetcode35周双周赛题解(上) 题目 思路与算法 代码实现 写在最后 题目 1.5503. 所有奇数长度子数组的和 2.5505. 所有排列中的最大和 思路与算法 第一题暴力就行了,看了很多大 ...

  6. 20200916:leetcode34周双周赛题解

    leetcode34周双周赛题解 题目 思路与算法 代码实现 写在最后 题目 1.1572. 矩阵对角线元素的和 2.1573. 分割字符串的方案数 3.1574. 删除最短的子数组使剩余数组有序 4 ...

  7. 20200827:2020力扣第33周双周赛题解

    2020力扣第33周双周赛题解 题目一 示例 解题思路与代码实现 题目二 示例 解题思路与代码实现 题目三 解题思路与代码实现 题目四 示例 解题思路与代码实现 写在最后 题目一 题目一:千位分隔数 ...

  8. 20200727:力扣第31周双周赛题解

    力扣第31周双周赛题解 题目一:在区间范围内统计奇数数目 给你两个非负整数low和high,请你返回low和high之间(包含二者)奇数的数目 0 <= low <= high <= ...

  9. Java SE 小白学习笔记 周周测 从小白到大牛

    周测01 一:填空题,每空1分,共20分 1:java的基本数据类型有(int)(byte)(short)(long)(double)(float)(Boolean)(char)2:请写出你接触过的关 ...

最新文章

  1. char N2Char(int n)函数:将一个整数转换为字符串,并放入一个字符串中
  2. Nginx 日志文件切割
  3. php 阻塞消息队列,linux 消息队列阻塞
  4. 共克时艰:科技助力湖北地区银行业务线上转型
  5. python千位分隔符_python – 为pandas数据帧中的整数设置千位分隔符
  6. Android strings.xml中定义字符串显示空格
  7. springboot websocket
  8. Linux必知必会的目录结构
  9. Linux内核调优之Sysctl研究
  10. 从现有数据创建 XML 架构和数据集
  11. mnist数据集下载地址
  12. 数字地形模型(DTM)与地形分析 ( 来自:86VR)
  13. dell计算机一直重启,为什么电脑老重启
  14. 攻防世界逆向入门maze详解
  15. 在Linux操作系统中,eclipse建立快捷方式
  16. 永磁体磁偏角测试原理和测量设备介绍
  17. 经典SQL练习——详细到令人发指(未完待续)
  18. Dom4j教程详解+XML详解(详解+举例)
  19. 实现表单form提交前进行确认提示 表单提交 确认对话框
  20. Android 4.4 系统如何恢复出厂设置

热门文章

  1. 北航计算机学院2018拟招收人数,北航2018年硕士研究生招生计划
  2. 2018年研究生入学考试高等数学卷一
  3. 学习编程有必要做笔记吗?
  4. 64-bit Itanium与x64
  5. 中国女性网民研究报告:读懂3.28亿“白骨精”与“白素贞”的内心
  6. 南京财经大学管理系统中计算机应用实践考试,月南京财经大学自考管理系统中计算机应用实践试卷.doc...
  7. SSM+智慧养老服务平台 毕业设计-附源码211709
  8. 艺术签名制作软件有什么?这篇文章来告诉你
  9. unity后处理Bloom与HDR和ColorGrade,ToneMapping
  10. CPU架构简介(ARM、X86/Atom、MIPS、PowerPC)