sdut pta查找表

news2024/11/22 14:19:05

7-1 电话聊天狂人

给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。

输入格式:

输入首先给出正整数N(≤105),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。

输出格式:

在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。

输入样例:

4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832

输出样例:

13588625832 3

#include<bits/stdc++.h>
using namespace std;
typedef map<string, int>msi;
int main()
{
	msi mp;
	msi::iterator it;
	int n;
	cin >> n;
	int maxn = 0;
	string maxnn;
	while(n--){
		string a, b;
		cin >> a >> b;
		mp[a]++;mp[b]++;
		if(mp[a] > maxn){
			maxn = mp[a];
			maxnn = a;
		}
		if(mp[b] > maxn){
			maxn = mp[b];
			maxnn = b;
		}
	}
	int cnt = 0;
		for(it = mp.begin(); it != mp.end(); it++){
			if(it->second == maxn){
				cnt++;
			}
		}
		if(cnt == 1) cout << maxnn << " " << mp[maxnn];
		else{
			for(it = mp.begin(); it != mp.end(); it++){
				if(it->second == maxn){
					cout << it->first << " " << it->second << " " << cnt << endl;
					break;
				}
			}
		}
	return 0;
}

7-2 两个有序序列的中位数

已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0​,A1​,⋯,AN−1​的中位数指A(N−1)/2​的值,即第⌊(N+1)/2⌋个数(A0​为第1个数)。

输入格式:

输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。

输出格式:

在一行中输出两个输入序列的并集序列的中位数。

输入样例1:

5
1 3 5 7 9
2 3 4 5 6

输出样例1:

4

输入样例2:

6
-100 -10 1 1 1 1
-50 0 2 3 4 5

输出样例2:

1
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N*2];
int main()
{
	int n;
	cin >> n;
	for(int i = 0; i < n * 2; i++){
		cin >> a[i];
	}
	sort(a, a + 2 * n);
	cout << a[n-1];
	return 0;
}

7-3 词频统计

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

输入格式:

输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

输出格式:

在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。

随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

输入样例:

This is a test.

The word "this" is the word with the highest frequency.

Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee.  But this_8 is different than this, and this, and this...#
this line should be ignored.

输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)

23
5:this
4:is
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
typedef pair<string, int>psi;
vector<psi>vec;
map<string, int>mp;
bool cmp(psi a, psi b){
	if(a.second == b.second){
		return a.first < b.first;
	}
	else return a.second > b.second;
}
int main()
{
	char ch;
	string str;
	while(~scanf("%c", &ch) && ch != '#'){
		if(ch >= 'A' && ch <= 'Z'){
			ch += 32;
		}
		if(ch >= 'a' && ch <= 'z' || ch >='0' && ch <= '9' || ch == '_'){
			if(str.size() < 15){
				str += ch;
			}
		}
		else{
			if(str.size() > 0){
				mp[str]++;
				str.clear();
			}
		}
	}
	for(auto it:mp){
		vec.push_back({it.first, it.second});
	}
	sort(vec.begin(), vec.end(), cmp);
	cout << vec.size() << endl;
	int cnt = vec.size() * 0.1;
	int cntt = 0;
	for(auto it:vec){
		cout << it.second << ":" << it.first << endl;
		cntt++;
		if(cntt >= cnt){
			break;
		}
	}
	return 0;
}

7-4 集合相似度

给定两个整数集合,它们的相似度定义为:Nc​/Nt​×100%。其中Nc​是两个集合都有的不相等整数的个数,Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。

输入格式:

输入第一行给出一个正整数N(≤50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(≤104),是集合中元素的个数;然后跟M个[0,109]区间内的整数。

之后一行给出一个正整数K(≤2000),随后K行,每行对应一对需要计算相似度的集合的编号(集合从1到N编号)。数字间以空格分隔。

输出格式:

对每一对需要计算的集合,在一行中输出它们的相似度,为保留小数点后2位的百分比数字。

输入样例:

3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3

输出样例:

50.00%
33.33%
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
set<int>s[55];// 给集合去重
int main()
{
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++){
		int m;
		cin >> m;
		while(m--){
			int x;
			cin >> x;
			s[i].insert(x);
		}
	}
	int k;
	cin >> k;
	while(k--){
		int num = 0;
		int a, b;
		cin >>  a >> b;
		for(auto it : s[a]){
			if(s[b].find(it) != s[b].end()){
				num++;
			}
		}
		int tot = s[a].size() + s[b].size() - num;
		double ans = 1.0 * num / tot;
		printf("%.2lf%%\n", ans * 100);
	}
	return 0;
}

7-5 悄悄关注

新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。

输入格式:

输入首先在第一行给出某用户的关注列表,格式如下:

人数N 用户1 用户2 …… 用户N

其中N是不超过5000的正整数,每个用户ii=1, ..., N)是被其关注的用户的ID,是长度为4位的由数字和英文字母组成的字符串,各项间以空格分隔。

之后给出该用户点赞的信息:首先给出一个不超过10000的正整数M,随后M行,每行给出一个被其点赞的用户ID和对该用户的点赞次数(不超过1000),以空格分隔。注意:用户ID是一个用户的唯一身份标识。题目保证在关注列表中没有重复用户,在点赞信息中也没有重复用户。

输出格式:

我们认为被该用户点赞次数大于其点赞平均数、且不在其关注列表上的人,很可能是其悄悄关注的人。根据这个假设,请你按用户ID字母序的升序输出可能是其悄悄关注的人,每行1个ID。如果其实并没有这样的人,则输出“Bing Mei You”。

输入样例1:

10 GAO3 Magi Zha1 Sen1 Quan FaMK LSum Eins FatM LLao
8
Magi 50
Pota 30
LLao 3
Ammy 48
Dave 15
GAO3 31
Zoro 1
Cath 60

输出样例1:

Ammy
Cath
Pota

输入样例2:

11 GAO3 Magi Zha1 Sen1 Quan FaMK LSum Eins FatM LLao Pota
7
Magi 50
Pota 30
LLao 48
Ammy 3
Dave 15
GAO3 31
Zoro 29

输出样例2:

Bing Mei You
#include<bits/stdc++.h>
using namespace std;
typedef pair<string, int>psi;
map<string, int>mp;
vector<psi>vec;
vector<string>ans;
int main(){
	int n;
	cin >> n;
	for(int i= 0; i < n; i++){
		string str;
		cin >> str;
		mp[str] = 1;
	}
	int m;
	cin >> m;
	int sum = 0;
	for(int i = 0; i < m; i++){
		string name;
		int like;
		cin >> name >> like;
		sum += like;
		vec.push_back({name, like});
	}
	int ave = sum / m;
	int cnt = 0;
	for(auto it : vec){
		if(it.second > ave && mp[it.first] == 0){
			ans.push_back(it.first);
			cnt ++;
		}
	}
	if(cnt == 0) cout << "Bing Mei You" << endl;
	else{
		sort(ans.begin(), ans.end());
		for(auto it : ans){
			cout << it << endl;
		}
	}
	return 0;
}

7-6 单身狗

“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。

输入格式:

输入第一行给出一个正整数 N(≤50000),是已知夫妻/伴侣的对数;随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔;之后给出一个正整数 M(≤10000),为参加派对的总人数;随后一行给出这 M 位客人的 ID,以空格分隔。题目保证无人重婚或脚踩两条船。

输出格式:

首先第一行输出落单客人的总人数;随后第二行按 ID 递增顺序列出落单的客人。ID 间用 1 个空格分隔,行的首尾不得有多余空格。

输入样例:

3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333

输出样例:

5
10000 23333 44444 55555 88888
#include<bits/stdc++.h>
using namespace std;
map<string, string>mps;
map<string, int>mpi;
vector<string>vec;
vector<string>ans;

int main()
{
	int n;
	cin >> n;
	while(n--){
		string hus, wife;
		cin >> hus >> wife;
		mps[hus] = wife;
		mps[wife] = hus;
		mpi[hus] = 1;
		mpi[wife] = 1;
	}
	int m;
	cin >> m;
	while(m--){
		string id;
		cin >> id;
		vec.push_back(id);
		mpi[id] ++;
	}
	for(auto it : vec){
		if(mpi[it] == 2 && mpi[mps[it]] == 2){
			continue;
		}
		ans.push_back(it);
	}
	sort(ans.begin(), ans.end());
	cout << ans.size() << endl;
	int num = ans.size();
	for(int i = 0; i < num; i++){
        if(i == num - 1) cout << ans[i] << endl;
        else cout << ans[i] << " ";
    }
	return 0;
}

7-7 词典

你刚从滑铁卢搬到了一个大城市,这里的人们讲一种难以理解的外语方言。幸运的是,你有一本字典来帮助你理解它们。

输入格式:

输入第一行是正整数N和M,后面是N行字典条目(最多10000条),然后是M行要翻译的外语单词(最多10000个)。每一个字典条目都包含一个英语单词,后面跟着一个空格和一个外语单词。
输入中的每个单词都由最多10个小写字母组成。

输出格式:

输出翻译后的英文单词,每行一个单词。非词典中的外来词汇输出“eh”。

输入样例:

5 3
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay

输出样例:

cat
eh
loops
#include<bits/stdc++.h>
using namespace std;
map<string, string>mps;
map<string, int>mpi;
int main()
{
	int n, m;
	cin >> n >> m;
	for(int i = 0; i < n; i++){
		string a, b;
		cin >> a >> b;
		mps[b] = a;
		mpi[b] = 1;
	}
	for(int i = 0; i < m; i++){
		string str;
		cin >> str;
		if(mpi[str] == 0) cout << "eh" << endl;
		else cout << mps[str] << endl;
	}
	return 0;
}

7-8 这是二叉搜索树吗?

一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,

  • 其左子树中所有结点的键值小于该结点的键值;
  • 其右子树中所有结点的键值大于等于该结点的键值;
  • 其左右子树都是二叉搜索树。

所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。

给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。

输入格式:

输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。

输出格式:

如果输入序列是对一棵二叉搜索树或其镜像进行前序遍历的结果,则首先在一行中输出 YES ,然后在下一行输出该树后序遍历的结果。数字间有 1 个空格,一行的首尾不得有多余空格。若答案是否,则输出 NO

输入样例 1:

7
8 6 5 7 10 8 11

输出样例 1:

YES
5 7 6 8 11 10 8

输入样例 2:

7
8 10 11 8 6 7 5

输出样例 2:

YES
11 8 10 7 5 6 8

输入样例 3:

7
8 6 8 5 10 9 11

输出样例 3:

NO
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int pre[N];
int f = 1;
vector<int> post;
void dfs(int l, int r){
    if(l > r) return ;
    int ll = l + 1, rr = r;
    if(f){// 正常二叉排序树
        while(ll <= r && pre[ll] < pre[l]){
            ll++;
        }
        while(rr > l && pre[rr] >= pre[l]){
            rr--;
        }
    }
    else{// 镜像二叉排序树
        while(ll <= r && pre[ll] >= pre[l]){
            ll++;
        }
        while(rr > l && pre[rr] < pre[l]){
            rr--;
        }
    }// 最终ll和rr挨着,并且ll在rr右边
    if(ll - rr != 1){// 若不是上述关系,就不是一棵二叉排序树
        return ;
    }
    dfs(l + 1, rr);// 左子树  此时的ll和rr已经不是原来的数值了
    dfs(ll, r);// 右子树
    post.push_back(pre[l]);
}
int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> pre[i];
    }
    dfs(0, n - 1);
    if(post.size() != n){
        f = 0;
        post.clear();
        dfs(0, n - 1);
    }
    if(post.size() != n){
        cout << "NO" << endl;
    }
    else{
        cout << "YES" << endl;
        cout << post[0];
        for(int i = 1; i < post.size(); i++){
            cout << " " << post[i];
        }
        cout << endl;
    }
    return 0;
}

7-9 二叉搜索树

对于一个无穷的满二叉排序树(如图),节点的编号是1,2,3,…。对于一棵树根为X的子树,沿着左节点一直往下到最后一层,可以获得该子树编号最小的节点;沿着右节点一直往下到最后一层,可以获得该子树编号最大的节点。现在给出的问题是“在一棵树根为X的子树中,节点的最小编号和最大编号是什么?”。请你给出答案。

输入格式:

输入的第一行给出测试用例的数目,一个整数N。在后面的N行中,每行给出一个整数X(1<=X<=231-1),表示子树树根的编号。

输出格式:

输出N行,第i行给出第i个问题的答案。

输入样例:

2
8
10

输出样例:

1 15
9 11

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    while(n--){
        int x;
        cin >> x;
        int t = x;
        int b = 1;
        while(x % 2 == 0){
            x /= 2;
            b *= 2;
        }
        b--;
        cout << t - b << " " << t + b << endl;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot:SpringBoot整合Junit 和 MyBatis(3)

SpringBoot整合Junit 和 MyBatis1. SpringBoot整合Junit2. SpringBoot整合MyBatis2.1 定义SpringBoot项目2.2 定义dao接口2.3 定义service层2.4 定义controller层2.5 配置yml/yaml文件2.6 postman测试1. SpringBoot整合Junit 在com.example.service下创建BookService接口 publ…

华为OD机试题,用 Java 解【两数之和绝对值最小】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

面向对象拓展贴

1. 类和对象的内存分配机制 1.1 分配机制  Java 内存的结构分析 栈&#xff1a; 一般存放基本数据类型(局部变量)堆&#xff1a; 存放对象(Cat cat , 数组等)方法区&#xff1a;常量池(常量&#xff0c;比如字符串)&#xff0c; 类加载信息示意图 [Cat (name, age, price)]…

安全狗出席2023中国网络和数据安全产业高峰论坛

2月23日&#xff0c;由工业和信息化部、四川省人民政府主办的“2023中国网络和数据安全产业高峰论坛”在成都顺利开幕。 作为国内云原生安全领导厂商&#xff0c;安全狗也出席了此次活动。 在此次活动中&#xff0c;“2022年网络安全技术应用试点示范项目授牌仪式”环节引起业…

TwinCAT3第三方伺服电机——汇川SV660N使用

目录 一、第三方伺服在TC3中配置和使用 二、xml文件拷贝 ​编辑 三、IO中扫描伺服 四、工程测试 五、汇川伺服参数设置说明 一、第三方伺服在TC3中配置和使用 在倍福控制系统中使用第三方伺服可以参见本人另一篇博客&#xff0c;有详细教程说明。本文仅仅对SV660N伺服设置…

表格形式的Sarsa与Q_learning算法

环境如下&#xff1a; 这是一个简单的环境&#xff0c;绿色方块代表终点&#xff0c;白色方块代表可行点&#xff0c;灰色方块代表陷阱 用Sarsa算法和Q_learning算法训练得到value表格 代码如下&#xff1a; (jupyter notebook上的代码&#xff0c;所以顺序看起来有点儿奇怪) …

【博学谷学习记录】超强总结,用心分享丨人工智能 Linux常用软件安装 CenOS 7 arm 安装 MySQL8

目录环境说明虚拟机安装MySQL下载步骤1.卸载系统自带的mariadb-lib2.上传安装包并解压3.按顺序安装4.初始化数据库5.目录授权&#xff0c;否则启动失败6.启动msyql服务7.查看msyql服务的状态8.在/var/log/mysqld.log下查看临时密码9.用临时密码登录到数据库10.执行下列mysql命令…

给打算转行IC的同学几点建议,来听听工程师怎么说?

“我不是相关专业的&#xff0c;也没什么IC设计的基础&#xff0c;能转IC设计岗吗&#xff1f;” “感觉自己学比较乱&#xff0c;不知道到底怎么学&#xff1f;没有项目经验怎么办&#xff1f;” 每一个想转IC设计岗位的同学都或多或少地遇到过这样的问题&#xff0c;有着找…

使用 Postman 实现 API 自动化测试

目录&#xff1a;导读 背景介绍 名词解析 使用说明 执行 API 测试 集成 CI 实现 API 自动化测试 写在最后 背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉&#xff0c;对于开发人员和测试人员而言&#xff0c;使用 postman 来编写和保存测试用例会是一种比…

Vuex 状态管理器(vuex安装与配置、state、mutations、actions、getters、module)全解

文章目录知识点Vuex 的简介Vuex 的安装与配置Vuex 的核心概念核心概念之&#xff1a;State核心概念之&#xff1a;Mutations核心概念之&#xff1a;Actions核心概念之&#xff1a;GettersVuex 规则核心概念之&#xff1a;Module实验总结知识点 Vuex 的简介Vuex 的安装与配置Vu…

UE实现相机飞行效果CesiumForUnreal之DynamicPawn飞行原理浅析

文章目录 1.实现目标2.实现过程2.1 FlyTo实现原理与代码2.2 DynamicPawn飞行原理3.参考资料1.实现目标 基于CesiumForUnreal的Dynamic Pawn实现飞行效果GIF动图: 2.实现过程 实现原理较为简单,基于CesiumForUnreal插件中DynamicPawn中的Camera实现相关功能。其中FlyTo直接通…

人工智能的几个研究方向

人工智能主要研究内容是&#xff1a;分布式人工智能与多智能主体系统、人工思维模型、知识系统、知识发现与数据挖掘、遗传与演化计算、人工生命、人工智能应用等等。 其中热门研究有以下几种。 一、计算机视觉 就包括图像识别&#xff0c;视频识别&#xff0c;具体应用有人…

接口自动化测试用例详解

phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式的接口是上传接口&#xff0c;需要对接口头部进行封装&#xff0c;所以没有办法在浏览器下直接调用&#xff0c;但是可以用Curl命令的-d参数传递接口需要的参数。当然我们还以众筹网的登录接口为例&#xff0c;讲…

Qt 事件机制

【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件&#xff0c;如窗体的加载、单击、双击等事件&#xff0c;编辑框&#xff08;文本框&#xff09;的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。…

速锐得适配北汽EX系列电动汽车CAN总线应用于公务分时租赁

过去的几年&#xff0c;我们看到整个分时租赁业务出现断崖式下跌&#xff0c;这是我们看到这种市场情况&#xff0c;是必然&#xff0c;也是出乎意料。原本很多融资后的出行公司、大牌的出行服务商的分时租赁业务&#xff0c;受各种影响不得不转型成其他出行服务。例如&#xf…

图像处理实战--Opencv实现人像迁移

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用Opencv实现人像迁移&#xff0c;欢迎大家一起参与探讨交流~ 本文目录&#xff1a;一、实验要求二、实验环境三、实验原理及操作1.照片准备2.图像增强3.实现美颜功能4.背景虚化5.图像二值化处理6.人…

C++ 实现pcm 转wav

输入音PCM 属性&#xff1a; 16k采样率 16位深 单声道 #include <iostream> #include <vector> #include <fstream> using namespace std; /* wav音频头部格式 */ typedef struct _wave_pcm_hdr { char riff[4]; // "RIFF&…

接口测试神器——Apifox从安装到使用的详细教程

目录 Apifox简介 安装 API文档导入 接口管理 接口设计 接口调试 使用脚本 Mock数据 测试管理 主题设置 总结 重点&#xff1a;配套学习资料和视频教学 Apifox简介 Apifox 的定位是Postman Swagger Mock JMeter&#xff0c;具有API文档管理、API调试、API Mock、…

2022年“网络安全”赛项山东省菏泽市选拔赛任务书

2022年“网络安全”赛项山东省菏泽市选拔赛任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一&#xff1a;Apache安全配置 任务二&#xff1a;数据分析-A 任务三&#xff1a;Windows操作系…

四信5G智慧灯杆落地厦门软件园 赋能园区实现智慧升级

2023年初&#xff0c;四信5G智慧灯杆项目落地厦门市集美软件园三期&#xff0c;实现一杆多能、多杆合一&#xff0c;为园区智慧管理和产业经济数字化高效赋能&#xff0c;打造智慧园区5G智慧灯杆项目标杆。 5G智慧灯杆赋能园区实现智慧升级 园区是城市发展的重要组成部分&#…