2021年【数据结构实验】扩展30题 7-28 悄悄关注 (25 分)

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

输入格式:

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

人数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

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;
}

2021年【数据结构实验】扩展30题 7-28 悄悄关注 (25 分)

插入:

#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;
}

 2021年【数据结构实验】扩展30题 7-28 悄悄关注 (25 分)

快排:

#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;
}

 2021年【数据结构实验】扩展30题 7-28 悄悄关注 (25 分)

 

上一篇:[书目20211212]实战低代码 [Low Code in Action]


下一篇:完美主义,项目路上的绊脚石