Color Changing Sofa Gym - 101962B、Renan and Cirque du Soleil Gym - 101962C、Hat-Xor Gym - 101962E 、Rei do Cangaço Gym - 101962K 、Sorting Machine Gym - 101962M
Color Changing Sofa
题意:给你一个由字母构成的字符串a,再给你一个由0、1构成的字符串b。你需要在a字符串中找到一个可以放下b的位置,要保证b字符串中0对应a字符串的位置每一个字符相等。且b字符串中1对应a字符串的位置每一个字符相等。你也可以把b字符串反着放置(也就是如果b字符串为0100,你也可以把它当作0010)
输出可以找到多少符合要求的位置
题解:
暴力模拟可以放置的所有位置
代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 #define INF 0x3f3f3f3f;
5
6 char s[2100], a[2100], b[2100];
7 int n, m;
8 bool check1(int pos)
9 {
10 char f1, f0;
11 for (int i = pos; i <= pos + m - 1; i++)
12 {
13 if (a[i - pos + 1] == '1')
14 f1 = s[i];
15 if (a[i - pos + 1] == '0')
16 f0 = s[i];
17 }
18 for (int i = pos; i <= pos + m - 1; i++)
19 {
20 if (a[i - pos + 1] == '1' && s[i] != f1)
21 return 0;
22 if (a[i - pos + 1] == '0' && s[i] != f0)
23 return 0;
24 }
25 return 1;
26 }
27
28 bool check2(int pos)
29 {
30 char f1, f0;
31 for (int i = pos; i <= pos + m - 1; i++)
32 {
33 if (b[i - pos + 1] == '1')
34 f1 = s[i];
35 if (b[i - pos + 1] == '0')
36 f0 = s[i];
37 }
38 for (int i = pos; i <= pos + m - 1; i++)
39 {
40 if (b[i - pos + 1] == '1' && s[i] != f1)
41 return 0;
42 if (b[i - pos + 1] == '0' && s[i] != f0)
43 return 0;
44 }
45 return 1;
46 }
47 int main()
48 {
49 scanf("%s", s + 1);
50 scanf("%s", a + 1);
51 n = strlen(s + 1);
52 m = strlen(a + 1);
53 for (int i = 1; i <= m; i++)
54 b[i] = a[m - i + 1];
55 int res = 0;
56 for (int i = 1; i <= n - m + 1; i++)
57 {
58 if (check1(i))
59 res++;
60 else if (check2(i))
61 res++;
62 }
63 printf("%d\n", res);
64
65 return 0;
66 }
Renan and Cirque du Soleil
题意:
给你一个长度为n的数组a,找出来这个数组a的所有子集合,让这个子集合中的最大值减去最小值。把所有子集合的最大值-最小值加起来取模于1e9+7输出就可以
题解:
找规律,之后矩阵快速幂
a2=1
找到的规律是ai=2*ai-1+2i-(i+1)
找一个系数矩阵
| 2 1 -1 0 |
| 0 2 0 0 |
| 0 0 1 1 |
| 0 0 0 1 |
最后乘于
| 1 |
| 8 |
| 4 |
| 1 |
代码:
1 /*
2 * @Author: hesorchen
3 * @Date: 2020-11-21 17:26:53
4 * @LastEditTime: 2020-11-24 16:05:21
5 * @Description: 栽种绝处的花
6 */
7 #include <bits/stdc++.h>
8 using namespace std;
9 const long long mod = 1e9 + 7;
10 #define INF 0x3f3f3f3f;
11
12 struct node
13 {
14 long long a[4][4];
15 };
16 void mes(node &d)
17 {
18 for (long long i = 0; i < 4; ++i)
19 {
20 for (long long j = 0; j < 4; ++j)
21 {
22 d.a[i][j] = 0;
23 }
24 }
25 }
26 void init(node &res)
27 {
28 mes(res);
29 for (long long i = 0; i < 4; ++i)
30 {
31 res.a[i][i] = 1;
32 }
33 }
34 node mul(node b, node c)
35 {
36 node d;
37 mes(d);
38 for (long long i = 0; i < 4; ++i)
39 {
40 for (long long j = 0; j < 4; ++j)
41 {
42 for (long long k = 0; k < 4; ++k)
43 {
44 d.a[i][j] = (d.a[i][j] + ((b.a[i][k] * c.a[k][j]) % mod)) % mod;
45 }
46 }
47 }
48 return d;
49 }
50 node quick(node a, long long b)
51 {
52 node res;
53 init(res);
54 while (b)
55 {
56 if (b & 1)
57 {
58 res = mul(res, a);
59 }
60 a = mul(a, a);
61 b >>= 1;
62 }
63 return res;
64 }
65 int main()
66 {
67 long long t;
68 scanf("%lld", &t);
69 while (t--)
70 {
71 long long n;
72 scanf("%lld", &n);
73 if (n == 1)
74 {
75 printf("0\n");
76 continue;
77 }
78 if (n == 2)
79 {
80 printf("1\n");
81 continue;
82 }
83
84 node b;
85 b.a[0][0] = 2;
86 b.a[0][1] = 1;
87 b.a[0][2] = -1;
88 b.a[0][3] = 0;
89
90 b.a[1][0] = 0;
91 b.a[1][1] = 2;
92 b.a[1][2] = 0;
93 b.a[1][3] = 0;
94
95 b.a[2][0] = 0;
96 b.a[2][1] = 0;
97 b.a[2][2] = 1;
98 b.a[2][3] = 1;
99
100 b.a[3][0] = 0;
101 b.a[3][1] = 0;
102 b.a[3][2] = 0;
103 b.a[3][3] = 1;
104
105 node res = quick(b, n - 2);
106 printf("%lld\n", (mod * 4 + res.a[0][0] + (res.a[0][1] * 8ll) % mod + res.a[0][2] * 4ll + res.a[0][3] * 1ll) % mod);
107 }
108 return 0;
109 }
110
111 //979641140
Hat-Xor
这个题目有点看不懂
代码:
1 #include <algorithm>
2 #include <cmath>
3 #include <cstdio>
4 #include <cstdlib>
5 #include <cstring>
6 #include <ctime>
7 #include <iostream>
8 #include <map>
9 #include <queue>
10 #include <set>
11 #include <vector>
12 using namespace std;
13 typedef long long ll;
14 const int maxn = 2e5 + 5;
15 const int mod = 998244353;
16 const double inf = 100000000005;
17 void read(int& v) {
18 int k = 1;
19 v = 0;
20 int c = getchar();
21 while (c < '0' || c > '9') {
22 if (c == '-')
23 k = 0;
24 c = getchar();
25 }
26 while (c >= '0' && c <= '9')
27 v = (v << 3) + (v << 1) + (c - 48), c = getchar();
28 if (k == 0)
29 v = -v;
30 }
31 int main() {
32 // int t;
33 // read(t);
34 // while (t--) {
35 string s;
36 cin >> s;
37 int n = s.size(), ans = 0;
38 for (int i = 0; i < n; i++)
39 ans ^= s[i] - '0';
40 if (!ans)
41 puts("YES");
42 else
43 puts("NO");
44 // }
45 }
46 /*
47 6
48 1 1 1 2
49 2 3 3 4
50 3 5 4 6
51 4 7 8 10
52 4 7 8 10
53 4 7 8 10
54 4
55 1 2 1 1
56 1 3 1 2
57 2 3 2 4
58 3 3 4 4
59 */
Rei do Cangaço
题意:
有n个房子,每一个房子里面有一定价值的财宝(有正有负)。如果你最开始站在第i个房子前,第一次你可以走3步到达i+3房子前,第二次你需要走6步,依次递增。你可以选择把[i,i+移动量)这一部分的房子的财宝都拿走。或者不拿
当你走过第n个房子就结束,对于每一个起始位置i,输出它的最大获利价值
题解:
模拟
代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 #define INF 0x3f3f3f3f;
5 #define mod 1000000007;
6
7 int a[50010];
8 int sum[50010];
9 int main()
10 {
11 int n;
12 scanf("%d", &n);
13 for (int i = 1; i <= n; i++)
14 scanf("%d", &a[i]);
15 for (int i = 1; i <= n; i++)
16 sum[i] = sum[i - 1] + a[i];
17 for (int i = 1; i <= n; i++)
18 {
19 int ct = 3, pre = i, ans = 0;
20 for (int j = i + 3;; j += ct)
21 {
22 if (sum[min(n, j - 1)] - sum[pre - 1] > 0)
23 {
24 ans += sum[min(n, j - 1)] - sum[pre - 1];
25 }
26 pre = j;
27 ct += 3;
28 if (j > n)
29 break;
30 }
31 printf("%d\n", ans);
32 }
33
34 return 0;
35 }
Sorting Machine
题意:
题目设定对一个区间排序花费是L*⌈log2(K+1)⌉
题目最开始给你一个倒着的序列a,其值如下:n、n-1、n-2...2、1
k就是你要排序的区间内ai>ai+1的数对的数量,L就是要排序区间长度
你要保证对整个区间排序的花费不超过7*n
对于输出你可以分成多组,前面组先输出表示在前面组已经排过序的基础上进行了下一组的排序
题解:
按照建线段树的形式输出线段树前三层就可以了,这个样子的话最后花费是不会超过7n的
打表也可以验证
代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 #define INF 0x3f3f3f3f;
5
6 struct node
7 {
8 int l, r;
9 } a[10];
10 int main()
11 {
12
13
14 int n;
15 scanf("%d", &n);
16 a[1].l = 1;
17 a[1].r = n;
18 int mid = a[1].l + a[1].r >> 1;
19 a[2].l = 1;
20 a[2].r = mid;
21 a[3].l = mid + 1;
22 a[3].r = n;
23 mid = a[2].l + a[2].r >> 1;
24 a[4].l = 1;
25 a[4].r = mid;
26 a[5].l = mid + 1;
27 a[5].r = a[2].r;
28 mid = a[3].l + a[3].r >> 1;
29 a[6].l = a[3].l;
30 a[6].r = mid;
31 a[7].l = mid + 1;
32 a[7].r = n;
33
34 printf("%d\n", 3);
35 printf("%d\n", 4);
36 printf("%d %d\n", a[4].l, a[4].r);
37 printf("%d %d\n", a[5].l, a[5].r);
38 printf("%d %d\n", a[6].l, a[6].r);
39 printf("%d %d\n", a[7].l, a[7].r);
40
41 printf("%d\n", 2);
42 printf("%d %d\n", a[2].l, a[2].r);
43 printf("%d %d\n", a[3].l, a[3].r);
44
45 printf("%d\n", 1);
46 printf("%d %d\n", a[1].l, a[1].r);
47 return 0;
48 }
Color Changing Sofa Gym - 101962B、Renan and Cirque du Soleil Gym - 101962C、Hat-Xor Gym - 101962E 、Rei do Cangaço Gym - 101962K 、Sorting Machine Gym - 101962M的更多相关文章
- Oracle数据库作业-6 29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 select tname,prof from teacher where depart = '计算机系' and prof not in ( select prof from teacher where depart 。
29.查询选修编号为"3-105"课程且成绩至少高于选修编号为"3-245"的同学的Cno.Sno和Degree,并按Degree从高到低次序排序. selec ...
- 为什么位运算可以实现加法(1、 不考虑进位的情况下位运算符中的异或^可以表示+号)(2、 位运算符中的与运算符&和左移运算符<<可以模拟加法中的进位)(3、位运算不仅可以做加法,还可以做其它的乘法减法等:计算机本质是二进制运算)
为什么位运算可以实现加法(1. 不考虑进位的情况下位运算符中的异或^可以表示+号)(2. 位运算符中的与运算符&和左移运算符<<可以模拟加法中的进位)(3.位运算不仅可以做加法,还 ...
- 阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性公网IP是独立的公网IP资源,可以绑定到阿里云专有网络VPC类型的ECS、NAT网关、私网负载均衡SLB上,并可以动态解绑,实现公网IP和ECS、NAT网关、SLB的解耦,满足灵活管理的要求。阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性络VPC类型的E
阿里云弹性公网IP那些事 阿里云云栖号 6月1日 弹性公网IP是独立的公网关.私网负载均衡SLB上,并可以动态解绑,实现公网IP和ECS.NAT网关.SLB的解耦,满足灵活管理的要求.
- Gym - 101962B_Color Changing Sofa
题意:将一个沙发放到一个分成好几个色块(一个字母代表一种颜色)的房间里,要求沙发染成跟所在色块一样的颜色,沙发分成(0,1)两种,0可以染成一种颜色,1可以染成一种颜色(换句话说,沙发最多两种颜色), ...
- DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)
函数重载重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同.实际上,编译器是通过检测参数来确定需要调用的例程.下面是从VCL 的数学单元(Math Unit)中摘录的一 ...
- python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器
1. is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同 == 比较的是两个对象的内容是否相等 2. with语句时用于对try except finally 的优 ...
- JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用
Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...
- CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放 《CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放》来自张戈博客
张戈博客很久以前分享过一个CC攻击的防御脚本,写得不怎么样,不过被51CTO意外转载了.博客从此走上了经常被人拿来练手的不归之路. 当然,还是有不少朋友在生产环境使用,并且会留言询问相关问题.根据这些 ...
- 项目那几步走:先配置setting路径文件、创建数据库、执行数据库迁移命令、配置mysql数据库信息、注册app、注释中间件、pymysql替换mysqldb-配置urls路由-继续视图函数-然后HTML页面展示-HTML里面导入css文件、models配置数据库表、
django使用mysql数据库: 首先cmd创建库 1.settings: """Django settings for day42 project. Generate ...
随机推荐
- 最全的HashMap源码解析!
HashMap源码解析 HashMap采用键值对形式的存储结构,每个key对应唯一的value,查询和修改的速度很快,能到到O(1)的平均复杂度.他是非线程安全的,且不能保证元素的存储顺序. 他的关系 ...
- Linux 中软链接和硬链接的使用
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link). 硬链接和软链接 硬链接 --- ln 要链接的文件 新硬链接名 软连接 --- l ...
- ctfshow—web—web4
打开靶机 发现与web3很相似,测试文件包含未成功 此题有两种解决方法 一.日志注入 查看日志的默认目录,得到了日志文件 ?url=/var/log/nginx/access.log 进行日志注入 & ...
- Pandas 常见操作详解
Pandas 常见操作详解 很多人有误解,总以为Pandas跟熊猫有点关系,跟gui叔创建Python一样觉得Pandas是某某奇葩程序员喜欢熊猫就以此命名,简单介绍一下,Pandas的命名来自于面板 ...
- DB2版本升级(V9.7升级到V11.1)
1.V11.1版本升级路线 DB2 11.1 可以将现有的 Db2 V9.7.Db2 V10.1 或 Db2 V10.5 实例和数据库直接升级到 Db2 V11.1.如果 Db2 服务器正在 Db2 ...
- 深度学习DeepLearning技术实战(12月18日---21日)
12月线上课程报名中 深度学习DeepLearning(Python)实战培训班 时间地点: 2020 年 12 月 18 日-2020 年 12 月 21日 (第一天报到 授课三天:提前环境部署 电 ...
- Centos7 添加用户及设置权限
一.添加用户 1.登录root 用户 [gau@localhost /]$ su Password: # 输入密码 [root@localhost /]# 2.添加用户 [root@localhost ...
- 大促密集,CDN如何保障电商体验如丝般顺滑?
简介: 前不久,阿里云技术天团空降CSDN在线峰会,对核心技术竞争力进行解读.其中,阿里云高级技术专家曾福华分享了<双11: CDN如何保障电商大促如丝般顺滑>的议题.俗话说:养兵千日,用 ...
- 虚拟化kvm的搭建
虚拟化, 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 ,在一台计算机上同时运行多个逻辑计算机,每台逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不 ...
- Python+Selenium+Unittest实现PO模式web自动化框架(7)
1.TestDatas目录的功能 TestDatas目录下存放的是测试数据,比如:登录功能的测试用例数据. # --^_^-- coding:utf-8 --^_^-- # @Remark:登录测试数 ...