• Shopping HDU


    Every girl likes shopping,so does dandelion.Now she finds the shop is increasing the price every day because the Spring Festival is coming .She is fond of a shop which is called "memory". Now she wants to know the rank of this shop's price after the change of everyday.

    InputOne line contians a number n ( n<=10000),stands for the number of shops.
    Then n lines ,each line contains a string (the length is short than 31 and only contains lowercase letters and capital letters.)stands for the name of the shop.
    Then a line contians a number m (1<=m<=50),stands for the days .
    Then m parts , every parts contians n lines , each line contians a number s and a string p ,stands for this day ,the shop p 's price has increased s.
    OutputContains m lines ,In the ith line print a number of the shop "memory" 's rank after the ith day. We define the rank as :If there are t shops' price is higher than the "memory" , than its rank is t+1.Sample Input

    3
    memory
    kfc
    wind
    2
    49 memory
    49 kfc
    48 wind
    80 kfc
    85 wind
    83 memory

    Sample Output

    1
    2
    map求解:
    #include<iostream>
    #include<map>
    #include<string>
    
    using namespace std;
    
    map<string,int>f;
    string name[10005];
    
    int main()
    {
        int n,m,num;
        while(cin>>n)
        {
            f.clear();
            for(int i=0; i<n; i++)
            {
                cin>>name[i];
                f[name[i]]=0;
                if(name[i]=="memory") num=i;
            }
            cin>>m;
            while(m--)
            {
                string temp;
                int cnt=0;
                int up;
                for(int i=0; i<n; i++)
                {
                    cin>>up>>temp;
                    f[temp]+=up;
                }
                for(int i=0; i<n; i++)
                {
                    if(f[name[i]]>f[name[num]]) cnt++;
                }
                cout<<cnt+1<<endl;
            }
        }
        return 0;
    }

    字符串哈希:

    #include <bits/stdc++.h>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<set>
    #include<vector>
    #include<iomanip>
    using namespace std;
    typedef long long ll;
    const int inf = 0x3f3f3f3f;
    const int mod = 998244353;
    const double eps = 1e-8;
    const int mx = 1001; //check the limits, dummy
    typedef pair<int, int> pa;
    const double PI = acos(-1);
    ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
    ll lcm(ll a, ll b) { return a * b / gcd(a, b); }
    bool isprime(int n) { if (n <= 1)return 0; for (int i = 2; i * i <= n; i++)if (n % i == 0)return 0; return 1; }
    #define swa(a,b) a^=b^=a^=b
    #define re(i,a,b) for(int i=(a),_=(b);i<_;i++)
    #define rb(i,a,b) for(ll i=(a),_=(b);i>=_;i--)
    #define clr(a,b) memset(a, b, sizeof(a))
    #define lowbit(x) ((x)&(x-1))
    #define mkp make_pair
    //inline ll qpow(ll a, ll b) { return b ? ((b & 1) ? a * qpow(a * a % mod, b >> 1) % mod : qpow(a * a % mod, b >> 1)) % mod : 1; }
    //inline ll qpow(ll a, ll b, ll c) { return b ? ((b & 1) ? a * qpow(a * a % c, b >> 1) % c : qpow(a * a % c, b >> 1)) % c : 1; }
    void ca(int kase, int ans) { cout << "Case #" << kase << ": " << ans << endl; }
    void sc(int& x) { scanf("%d", &x); }void sc(int64_t& x) { scanf("%lld", &x); }void sc(double& x) { scanf("%lf", &x); }void sc(char& x) { scanf(" %c", &x); }void sc(char* x) { scanf("%s", x); }
    int n, m, tt, k;
    #define N 10005
    struct node
    {
        char name[35];
        int price;
    };
    vector<node>List[N];//用来解决冲突
    unsigned int BKDRHash(char* str) {
        unsigned int seed = 31, key = 0;
        while (*str)
        {
            key = key * seed + (*str++);
        }
        return key & 0x7fffffff;
    }
    int main()
    {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        
        int p[N],key,add,memory_price,rank,len;
        char s[35];
        node t;
        while (cin >> n) {
            re(i, 0, N)List[i].clear();
            re(i, 0, n) {
                cin >> t.name;
                key = BKDRHash(t.name) % N;
                List[key].push_back(t);
            }
            cin >> m;
            while (m--)
            {
                rank = len = 0;
                re(i, 0, n) {
                    cin >> add >> s;
                    key = BKDRHash(s) % N;
                    re(j,0,List[key].size())
                        if (strcmp(List[key][j].name, s) == 0) {
                            List[key][j].price += add;
                            if (strcmp(s, "memory") == 0)
                                memory_price = List[key][j].price;
                            else
                                p[len++] = List[key][j].price;
                            break;
                        }
                }
                re(i, 0, len)
                    if (memory_price < p[i])
                        rank++;
                cout << rank + 1 << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    数据结构与算法之PHP实现二叉树的遍历
    数据结构与算法之二叉树的基本概念和类型
    JS实现下拉单的二级联动
    数据结构与算法之PHP实现队列、栈
    数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)
    数据结构与算法之数组、链表、队列、栈
    大型网站架构总结
    MySQL分库分表
    C基础 那些年用过的奇巧淫技
    C高级 服务器内核分析和构建 (一)
  • 原文地址:https://www.cnblogs.com/xxxsans/p/12862737.html
Copyright © 2020-2023  润新知