首页 > 代码库 > (哈希)计算之道初赛第五场 - UCloud 的安全秘钥
(哈希)计算之道初赛第五场 - UCloud 的安全秘钥
这种渣比代码也能A?
数据太水了吧。。
按长度统一起来算一次滑动窗口的哈希值,sort一下,二分算数量。
复杂度应该是sqrt(T)*n*logn吧。
自己出个数据都能卡掉。
1 #include <string> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 #include <map> 7 #include <unordered_map> 8 9 using namespace std;10 11 typedef unsigned long long ull;12 #define fi first13 #define se second14 const int maxn = 50010;15 16 unordered_map<int, vector<pair<int, ull> > > query;17 int n;18 int num[maxn];19 20 int q;21 ull magic = 1e9 + 7;22 int ans[maxn << 1];23 ull fastinit[maxn];24 25 unordered_map<int, int > gee;26 vector<ull> cnt;27 28 29 void init() {30 fastinit[0] = 1;31 for(int i = 1; i <= 50000; i++) {32 fastinit[i] = fastinit[i - 1] * magic;33 }34 }35 36 ull fast(int k) {37 return fastinit[k];38 }39 40 ull make_hash() {41 ull res = 0;42 for(auto it = gee.begin(); it != gee.end(); it++) {43 res += it->se * fast(n - (it->fi));44 }45 return res;46 }47 48 49 void count_number(int len) {50 gee.clear();51 cnt.clear();52 for(int i = 0; i < len; i++) {53 gee[num[i]]++;54 }55 ull res = make_hash();56 cnt.push_back(res);57 for(int i = 1; i <= n - len; i++) {58 res -= fast(n - num[i - 1]);59 res += fast(n - num[i + len - 1]);60 cnt.push_back(res);61 }62 sort(cnt.begin(), cnt.end());63 }64 65 66 int main() {67 init();68 scanf("%d", &n);69 for(int i = 0; i < n; i++) {70 scanf("%d", &num[i]);71 }72 scanf("%d", &q);73 for(int c = 0; c < q; c ++) {74 int m;75 gee.clear();76 scanf("%d", &m);77 for(int i = 0; i < m; i++) {78 int x;79 scanf("%d", &x);80 gee[x]++;81 }82 query[m].push_back(make_pair(c, make_hash()));83 }84 for(auto it = query.begin(); it != query.end(); it++) {85 int len = it->fi;86 count_number(len);87 for(auto vt = it->se.begin(); vt != it->se.end(); vt++) {88 int ind = vt->fi;89 ull ha = vt->se;90 ans[ind] = upper_bound(cnt.begin(), cnt.end(), ha) - lower_bound(cnt.begin(), cnt.end(), ha);91 }92 }93 for(int i = 0; i < q; i++) {94 printf("%d\n", ans[i]);95 }96 return 0;97 }
(哈希)计算之道初赛第五场 - UCloud 的安全秘钥
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。