新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。
输入格式:
输入首先在第一行给出某用户的关注列表,格式如下:
人数N 用户1 用户2 …… 用户N
其中N
是不超过5000的正整数,每个用户i
(i
=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
emmm,这个题思路很简单,就是最初写完后会超时。最开始没有看到要按照姓名升序输出,只过了两个样例,然后又读了遍题才发现。
就写了个冒泡排序,然后最后一点超时,然后就改
改成输入的时候顺便插入排序,结果还是超时
本以为这题不能用快排(思维固化,感觉只能排纯数字),然后又看了眼自己写的快排代码,深入理解到,主要关键字和次要关键字的意义,然后修改,就过了!!
冒泡:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
typedef struct {
char name[10];
int cnt;
} Person;
void Bubble_Sort(Person P[], int n) {
int i, j, flag = 1;
Person t;
for(i = 1; i <= n && flag == 1; ++i) {
flag = 0;
for(j = 1; j <= n - i; ++j) {
if(strcmp(P[j].name, P[j + 1].name) > 0) {
t = P[j];
P[j] = P[j + 1];
P[j + 1] = t;
flag = 1;
}
}
}
}
int main() {
int N, M, i, j;
char pname[5005][10];
Person P[10005];
scanf("%d", &N);
for(i = 1; i <= N; i++)
scanf("%s", pname[i]);
scanf("%d", &M);
int sum = 0, flag1, flag2 = 1;;
for(i = 1; i <= M; i++) {
scanf("%s %d", P[i].name, &P[i].cnt);
sum += P[i].cnt;
}
sum /= M;
Bubble_Sort(P, M);
// for(i = 1; i <= M - 1; i++)
// printf("%s %s\n", P[i].name,P[i + 1].name);
for(i = 1; i <= M; i++) {
if(P[i].cnt > sum) {
flag1 = 1;
for(j = 1; j <= N; j++) {
if(strcmp(pname[j], P[i].name) == 0) {
flag1 = 0;
break;
}
}
if(flag1) {
flag2 = 0;
printf("%s\n", P[i].name);
}
}
}
if(flag2)
printf("Bing Mei You");
return 0;
}
插入:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
typedef struct {
char name[10];
int cnt;
} Person;
/*void Bubble_Sort(Person P[], int n) {
int i, j, flag = 1;
Person t;
for(i = 1; i <= n && flag == 1; ++i) {
flag = 0;
for(j = 1; j <= n - i; ++j) {
if(strcmp(P[j].name, P[j + 1].name) > 0) {
t = P[j];
P[j] = P[j + 1];
P[j + 1] = t;
flag = 1;
}
}
}
}*/
int main() {
int N, M, i, j;
char pname[5005][10];
Person P[10005];
scanf("%d", &N);
for(i = 1; i <= N; i++)
scanf("%s", pname[i]);
scanf("%d", &M);
int sum = 0, flag1, flag2 = 1;
scanf("%s %d", P[1].name, &P[1].cnt);
sum+=P[1].cnt;
for(i = 2; i <= M; i++) {
scanf("%s %d", P[i].name, &P[i].cnt);
sum += P[i].cnt;
if(strcmp(P[i].name,P[i-1].name) < 0){
P[0] = P[i];
for(j = i-1;strcmp(P[0].name,P[j].name)<0;j--){
P[j+1] = P[j];
}
P[j+1]=P[0];
}
}
sum /= M;
for(i = 1; i <= M; i++) {
if(P[i].cnt > sum) {
flag1 = 1;
for(j = 1; j <= N; j++) {
if(strcmp(pname[j], P[i].name) == 0) {
flag1 = 0;
break;
}
}
if(flag1) {
flag2 = 0;
printf("%s\n", P[i].name);
}
}
}
if(flag2)
printf("Bing Mei You");
return 0;
}
快排:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
typedef struct {
char name[10];
int cnt;
} Person;
int Partition(Person L[], int low, int high) {
L[0] = L[low];
Person pivokey;
pivokey = L[low];
while(low < high) {
while(low < high &&strcmp(L[high].name,pivokey.name) > 0)
--high;
L[low] = L[high];
while(low < high && strcmp(L[low].name,pivokey.name) < 0)
++low;
L[high] = L[low];
}
L[low] = L[0];
return low;
}
void Qsort(Person L[], int low, int high) {
int pivotloc;
if(low < high) {
pivotloc = Partition(L, low, high);
Qsort(L, low, pivotloc - 1);
Qsort(L, pivotloc + 1, high);
}
}
int main() {
int N, M, i, j;
char pname[5005][10];
Person P[10005];
scanf("%d", &N);
for(i = 1; i <= N; i++)
scanf("%s", pname[i]);
scanf("%d", &M);
int sum = 0, flag1, flag2 = 1;
for(i = 1; i <= M; i++) {
scanf("%s %d", P[i].name, &P[i].cnt);
sum += P[i].cnt;
}
sum /= M;
Qsort(P,1,M);
for(i = 1; i <= M; i++) {
if(P[i].cnt > sum) {
flag1 = 1;
for(j = 1; j <= N; j++) {
if(strcmp(pname[j], P[i].name) == 0) {
flag1 = 0;
break;
}
}
if(flag1) {
flag2 = 0;
printf("%s\n", P[i].name);
}
}
}
if(flag2)
printf("Bing Mei You");
return 0;
}