2607. URL

10175102262 LarsPendragon

用C写的话要善用string.h中的函数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {char url[101]; int t;}Url;
int cmp(const void *a, const void *b)
{
    Url *p1=((Url*)a), *p2=((Url*)b);
    if(p1->t==p2->t) return strcmp(p1->url, p2->url);
    return p2->t-p1->t;
}
int main(void)
{
    int T, I;
    scanf("%d",&T);
    for(I=0; I<T; I++)
    {
        int n, i, j;
        Url u[100], s[100];
        scanf("%d",&n);
        for(i=0; i<n; i++)
        {
            char op[8];
            scanf("%s",op);
            if(strcmp(op, "Visit")==0)
            {
                scanf("%s",u[i].url);
                u[i].t=1;
                for(j=0; j<i; j++)
                    if(strcmp(u[i].url,u[j].url)==0)
                    {
                        u[j].t++;
                        n--;
                        i--;
                    }
            }
            else
            {
                char ask[101];
                scanf("%s",ask);
                int l, k, count=0;
                l=strlen(ask);
                for(k=0; k<i; k++)
                    if(strncmp(u[k].url, ask, l)==0)
                        s[count++]=u[k];
                n--;
                i--;
                qsort(s, count, sizeof(s[0]), cmp);
                for(k=0; k<count; k++)
                    printf("%s\n",s[k].url);
                printf("\n");
            }
        }
    }
    return 0;
}
Suzuki_Yuuta
struct linkData {
    string url; int cnt;
};
bool cmp(const linkData &a, const linkData &b) {
    if (a.cnt == b.cnt) {
        return (a.url < b.url);
    }
    return (a.cnt > b.cnt);
}

void solve() {
    int n; cin >> n; cin.ignore();
    map<string, int> linkCnt;
    for (int i = 0; i < n; i++) {
        string cmd, link;
        cin >> cmd >> link; cin.ignore();
        if (cmd == "Visit") {
            if (linkCnt.find(link) == linkCnt.end()) {
                linkCnt[link] = 1;
            } else {
                linkCnt[link]++;
            }
        } else {
            vector<linkData> data;
            for (map<string, int>::iterator it = linkCnt.begin(); it != linkCnt.end(); it++) {
                if (it->first.find(link) != string::npos) {
                    linkData tmp; tmp.url = it->first; tmp.cnt = it->second;
                    data.push_back(tmp);
                }
            }
            sort(data.begin(), data.end(), cmp);
            for (vector<linkData>::iterator it = data.begin(); it != data.end(); it++) {
                cout << it->url << endl;
            }
            cout << endl;
        }
    }
}
你当前正在回复 博客/题目
存在问题!