一个复数(x+iy)集合,两种操作作用在该集合上: 1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE; 2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE; 最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
输入描述:
输入有多组数据。 每组输入一个n(1<=n<=1000),然后再输入n条指令。
输出描述:
根据指令输出结果。 模相等的输出b较小的复数。 a和b都是非负数。
示例1
输入:
3
Pop
Insert 1+i2
Pop
输出:
empty
SIZE = 1
1+i2
SIZE = 0
// 题目链接 https://www.nowcoder.com/practice/abdd24fa839c414a9b83aa9c4ecd05cc?tpId=67&tqId=29643&tPage=1&ru=/kaoyan/retest/1005&qru=/ta/bupt-kaoyan/question-ranking
#include<stdio.h>
#include<queue>
#include<string>
using namespace std;
struct info {
int re;
int i;
};
bool operator < (info l, info r) {
// l的模小于r的模 触发交换 即true 触发交换
return l.re * l.re + l.i * l.i < r.re * r.re + r.i * r.i;
}
int main() {
int n;
scanf("%d", &n);
// priority_queue 相当于大根堆
priority_queue<info> q;
for (int i = 0; i < n; i++) {
char str[30];
scanf("%s", str);
string s = str;
if (s == "Pop") {
if (q.empty()) {
printf("empty\n");
} else {
printf("%d+i%d\n", q.top().re, q.top().i);
q.pop();
printf("SIZE = %d\n", q.size());
}
} else if(s == "Insert"){
int re, i;
scanf("%d+i%d", &re, &i);
info e;
e.re = re;
e.i = i;
q.push(e);
printf("SIZE = %d\n", q.size());
}
}
return 0;
}
注: scanf(“%s”,arr) 读取到 空格 停止
---------------------------------------------------------------------------
描述
输入N个学生的信息,然后进行查询。
输入描述:
输入的第一行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息格式如下: 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下: 02 03 01 04
输出描述:
输出M行,每行包括一个对应于查询的学生的信息。 如果没有对应的学生信息,则输出“No Answer!”
输入:
4
01 李江 男 21
02 刘唐 男 23
03 张军 男 19
04 王娜 女 19
5
02
03
01
04
03
输出:
02 刘唐 男 23
03 张军 男 19
01 李江 男 21
04 王娜 女 19
03 张军 男 19
// 题目链接 https://www.nowcoder.com/practice/fe8bff0750c8448081759f3ee0d86bb4?tpId=60&tqId=29499&tPage=2&ru=/kaoyan/retest/1001&qru=/ta/tsing-kaoyan/question-ranking
#include<cstdio>
#include<string>
#include<map>
using namespace std;
struct info {
string name;
string c;
int age;
};
int main() {
int n, m;
map<string, info> ma;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
char num[1000];
char name[20];
char sex[20];
int age;
scanf("%s %s %s %d", num, name, sex, &age);
string numstr = num;
info f;
f.name = name;
f.c = sex;
f.age = age;
// 像map 中添加键值对(两种插入方式)
ma.insert(pair<string, info>(numstr, f));
//ma[numstr] = f;
}
scanf("%d", &m);
for (int i = 0; i < m; ++i) {
char num[20];
scanf("%s", num);
string numstr = num;
if (ma.find(numstr) != ma.end()) {
printf("%s %s %s %d\n", numstr.c_str(), ma[numstr].name.c_str(), ma[numstr].c.c_str(), ma[numstr].age);
} else {
printf("No Answer!\n");
}
}
return 0;
}