Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined)

Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined)

A.模拟

B.只要有一个数字出现的次数是奇数就不会输。

C.因为n的二进制位上最多只有1000个1,所以我们可以暴力预处理出$1 \cdots 1000$变成$1$的步数。

枚举n的每一位。如果这一位是1,把它变成0就可以保证一定比n小。比i高的位跟n一样,计算从低位选出若干个1的方案数。

D.线段树维护区间gcd。查询的时候如果不同就进去看一看。

E.点分治啦。把每个字符都表示成二进制上的某一位。注意root的处理。要么add的时候不算root,query时算;要么add的时候算root,query时不算。(这里的算指的是字符的xor那些东西)

 1 #include<vector>
 2 #include<bitset>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<iostream>
 6 #define pb push_back
 7 using namespace std;
 8 typedef long long ll;
 9 int n, cnt[1<<20], vis[200005], R, sz[200005], mx[200005], size;
10 ll ans[200005], tans;
11 char a[200005]; 
12 vector < int > g[200005];
13 inline void gmax(int &x, int y) {if (x < y) x = y;}
14 void getR(int u, int f) {
15     sz[u] = 1; mx[u] = 0;
16     for (int i = 0, v; i < g[u].size(); ++i)
17         if (!vis[v=g[u][i]] && v != f) {
18             getR(v, u); sz[u] += sz[v];    
19             gmax(mx[u], sz[v]);
20         }
21     gmax(mx[u], size - sz[u]);
22     if (mx[u] < mx[R]) R = u;
23 }
24 ll upd(int val) {
25     ll res = cnt[val];
26     for (int i = 0; i < 20; ++i)
27         res += cnt[val^(1<<i)];
28     return res;
29 }
30 ll upd(int u, int f, int val) {
31     val ^= 1 << a[u]; ll res = upd(val);
32     for (int i = 0, v; i < g[u].size(); ++i)
33         if (!vis[v=g[u][i]] && v != f) res += upd(v, u, val);
34     ans[u] += res;
35     return res;
36 }
37 void add(int u, int f, int val) {
38     val ^= 1 << a[u]; ++cnt[val];
39     for (int i = 0, v; i < g[u].size(); ++i)
40         if (!vis[v=g[u][i]] && v != f) add(v, u, val);
41 }
42 void del(int u, int f, int val) {
43     val ^= 1 << a[u]; --cnt[val];
44     for (int i = 0, v; i < g[u].size(); ++i)
45         if (!vis[v=g[u][i]] && v != f) del(v, u, val);
46 }
47 void solve(int u) {
48     vis[u] = 1; add(u, u, 0); tans = upd(0);
49     for (int v, i = 0; i < g[u].size(); ++i)
50         if (!vis[v=g[u][i]]) del(v, u, 1 << a[u]), tans += upd(v, u, 0), add(v, u, 1 << a[u]);
51     ans[u] += tans / 2; del(u, u, 0);
52     for (int v, i = 0; i < g[u].size(); ++i)
53         if (!vis[v=g[u][i]]) size = sz[v], getR(v, R = 0), solve(R);    
54 }
55 int main() {
56     scanf("%d", &n); mx[0] = 0x3f3f3f3f; size = n;
57     for (int u, v, i = 1; i < n; ++i)
58         scanf("%d%d", &u, &v), g[u].pb(v), g[v].pb(u);
59     scanf("%s", a + 1);
60     for (int i = 1; i <= n; ++i) a[i] -= 'a';
61     getR(1, 1); solve(R);
62     for (int i = 1; i <= n; ++i)
63         printf("%lld%c", ans[i] + 1, " \n"[i==n]);
64     return 0;
65 }
View Code

F.bitset。。。

 1 #include<bitset>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6 bitset < 100005 > s[30], ans, U;
 7 char str[100005], buf[100005];
 8 int main() {
 9     scanf("%s", str + 1);
10     int n = strlen(str + 1), m;
11     for (int i = 1; i <= n; ++i)
12         s[str[i]-'a'][i] = 1;
13     for (int i = 0; i < n; ++i) U[i] = 1;
14     scanf("%d", &m);
15     while (m--) {
16         int op, l, r;
17         scanf("%d", &op);
18         if (op == 1) {
19             scanf("%d%s", &l, buf + 1);
20             s[str[l]-'a'][l] = 0;
21             str[l] = buf[1];
22             s[str[l]-'a'][l] = 1;
23         } else {
24             scanf("%d%d%s", &l, &r, buf + 1);
25             int len = strlen(buf + 1);
26             if (len > r - l + 1) {
27                 puts("0"); continue;
28             }
29             ans = U;
30             for (int i = 1; i <= len; ++i)
31                 ans &= (s[buf[i]-'a']>>i);
32             printf("%d\n", (ans>>(l-1)).count() - (ans>>(r-len+1)).count());
33         }
34     }
35     return 0;    
36 }
View Code

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值