博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #457 (Div. 2)
阅读量:5818 次
发布时间:2019-06-18

本文共 2970 字,大约阅读时间需要 9 分钟。

A.模拟。

B.模拟。比赛的时候这题出锅了,然后就unrated了。注意要先保证最大值最小,再保证字典序最大。

C.构造。挑一个大于N的质数然后连啊连就可以了。

D.可持久化Trie。弄两个Trie。一个记录字符串,另一个记录数字。

1 #include
2 #include
3 #include
4 using namespace std; 5 struct StringTrie { 6 StringTrie *ch[26]; int val; 7 StringTrie() {memset(this, 0, sizeof(*this)); val = -1;} 8 StringTrie* set(int n, const char *str, int p, int v) { 9 StringTrie *res = new StringTrie(); *res = *this;10 if (p >= n) res->val = v;11 else {12 int c = str[p] - 'a';13 if (!ch[c]) ch[c] = new StringTrie();14 res->ch[c] = ch[c]->set(n, str, p + 1, v);15 } return res;16 }17 int query(int n, const char *str, int p) {18 if (p >= n) return val;19 else {20 int c = str[p] - 'a';21 if (!ch[c]) return -1;22 return ch[c]->query(n, str, p + 1);23 }24 }25 } *srt[100005];26 struct BinaryTrie {27 BinaryTrie *ch[2]; int val;28 BinaryTrie() {memset(this, 0, sizeof(*this));}29 BinaryTrie* add(int x, int val, int p) {30 BinaryTrie *res = new BinaryTrie(); *res = *this; res->val += val;31 if (p >= 0) {32 int c = (x >> p) & 1;33 if (!ch[c]) ch[c] = new BinaryTrie();34 res->ch[c] = ch[c]->add(x, val, p - 1);35 } return res;36 }37 int query(int x, int p) {38 if (p < 0) return 0;39 else {40 int c = (x >> p) & 1, res = 0;41 if (c && ch[0]) res += ch[0]->val;42 if (ch[c]) res += ch[c]->query(x, p - 1);43 return res;44 }45 }46 } *brt[100005];47 int main() {48 srt[0] = new StringTrie(); brt[0] = new BinaryTrie();49 int n; scanf("%d", &n); char op[20], str[20];50 for (int v, i = 1; i <= n; ++i) {51 scanf("%s", op);52 if (*op == 's') {53 scanf("%s%d", str, &v); int l = strlen(str);54 int x = srt[i-1]->query(l, str, 0);55 srt[i] = srt[i-1]->set(l, str, 0, v);56 brt[i] = brt[i-1];57 if (~x) brt[i] = brt[i]->add(x, -1, 30);58 brt[i] = brt[i]->add(v, 1, 30);59 } else if (*op == 'r') {60 scanf("%s", str); int l = strlen(str);61 int x = srt[i-1]->query(l, str, 0);62 brt[i] = brt[i-1]; srt[i] = srt[i-1]->set(l, str, 0, -1);63 if (~x) brt[i] = brt[i]->add(x, -1, 30);64 } else if (*op == 'q') {65 scanf("%s", str); int l = strlen(str);66 brt[i] = brt[i-1]; srt[i] = srt[i-1];67 int x = srt[i]->query(l, str, 0);68 if (~x) printf("%d\n", brt[i]->query(x, 30));69 else puts("-1"); fflush(stdout);70 } else {71 scanf("%d", &v); srt[i] = srt[i-v-1]; brt[i] = brt[i-v-1];72 }73 }74 return 0; 75 }

E.跟bzoj上的遥远的国度很类似。

转载于:https://www.cnblogs.com/p0ny/p/8328207.html

你可能感兴趣的文章
Golang 使用 Beego 与 Mgo 开发的示例程序
查看>>
ntpdate时间同步
查看>>
+++++++子域授权与编译安装(一)
查看>>
asp.net怎样在URL中使用中文、空格、特殊字符
查看>>
路由器发布服务器
查看>>
实现跨交换机VLAN间的通信
查看>>
jquery中的data-icon和data-role
查看>>
python例子
查看>>
环境变量(总结)
查看>>
ios之UILabel
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
1月9日学习内容整理:爬虫基本原理
查看>>
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
渐变色文字
查看>>
C++ 0X 新特性实例(比较常用的) (转)
查看>>
node生成自定义命令(yargs/commander)
查看>>
各种非算法模板
查看>>
node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)
查看>>
PIE.NET-SDK插件式二次开发文档
查看>>