Shopping HDU - 2648 map/字符串哈希
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; }