Color Changing Sofa

Gym - 101962B

题意:给你一个由字母构成的字符串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

Gym - 101962C

题意:

给你一个长度为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

Gym - 101962E

这个题目有点看不懂

代码:

 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

Gym - 101962K

题意:

有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

Gym - 101962M

题意:

题目设定对一个区间排序花费是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的更多相关文章

  1. 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 ...

  2. 为什么位运算可以实现加法(1、 不考虑进位的情况下位运算符中的异或^可以表示+号)(2、 位运算符中的与运算符&和左移运算符<<可以模拟加法中的进位)(3、位运算不仅可以做加法,还可以做其它的乘法减法等:计算机本质是二进制运算)

    为什么位运算可以实现加法(1. 不考虑进位的情况下位运算符中的异或^可以表示+号)(2. 位运算符中的与运算符&和左移运算符<<可以模拟加法中的进位)(3.位运算不仅可以做加法,还 ...

  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的解耦,满足灵活管理的要求.

  4. Gym - 101962B_Color Changing Sofa

    题意:将一个沙发放到一个分成好几个色块(一个字母代表一种颜色)的房间里,要求沙发染成跟所在色块一样的颜色,沙发分成(0,1)两种,0可以染成一种颜色,1可以染成一种颜色(换句话说,沙发最多两种颜色), ...

  5. DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)

    函数重载重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同.实际上,编译器是通过检测参数来确定需要调用的例程.下面是从VCL 的数学单元(Math Unit)中摘录的一 ...

  6. python is、==区别;with;gil;python中tuple和list的区别;Python 中的迭代器、生成器、装饰器

    1. is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同 == 比较的是两个对象的内容是否相等 2. with语句时用于对try except finally 的优 ...

  7. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  8. CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放 《CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放》来自张戈博客

    张戈博客很久以前分享过一个CC攻击的防御脚本,写得不怎么样,不过被51CTO意外转载了.博客从此走上了经常被人拿来练手的不归之路. 当然,还是有不少朋友在生产环境使用,并且会留言询问相关问题.根据这些 ...

  9. 项目那几步走:先配置setting路径文件、创建数据库、执行数据库迁移命令、配置mysql数据库信息、注册app、注释中间件、pymysql替换mysqldb-配置urls路由-继续视图函数-然后HTML页面展示-HTML里面导入css文件、models配置数据库表、

    django使用mysql数据库: 首先cmd创建库 1.settings: """Django settings for day42 project. Generate ...

随机推荐

  1. Java并发编程实战(5)- 线程生命周期

    在这篇文章中,我们来聊一下线程的生命周期. 目录 概述 操作系统中的线程生命周期 Java中的线程生命周期 Java线程状态转换 运行状态和阻塞状态之间的转换 运行状态和无时限等待状态的切换 运行状态 ...

  2. docker 安装linux centos 环境

    如何在centos7中使用docker创建一个支持ssh连接的容器 以下内容已有现成的,这里借用下这哥们的帖子https://www.cnblogs.com/caidingyu/p/10642158. ...

  3. linux线程数限制与zabbix监控

    Linux最大线程数限制及当前线程数查询 最大线程数计算方式: n = total_memory/128k; Linux用户线程数限制而导致的程序异常为 java.lang.OutOfMemoryEr ...

  4. 【Linux】删除软连接被坑

    ------------------------------------------------------------------------------------------------- | ...

  5. 【Linux】Linux系统dev/目录下的tty

    终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备.tty是Teletype的缩写.Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletyp ...

  6. 【Oracle】更改oracle中的用户名称

    修改oracle中的用户名,要需要修改oracle基表中的相关内容, 1.查看user#, select user#,name from user$ s where s.name='用户修改前的'; ...

  7. ORA-00054: 資源正被使用中, 請設定 NOWAIT 來取得它, 否則逾時到期

    1.查看被使用资源的OBJECT_ID SELECT *FROM DBA_OBJECTS WHERE OBJECT_NAME='OBJECT_NAME' 2.查看资源被谁占用SELECT * FROM ...

  8. Android 代码规范大全

    前言 虽然我们项目的代码时间并不长,也没经过太多人手,但代码的规范性依然堪忧,目前存在较多的比较自由的「代码规范」,这非常不利于项目的维护,代码可读性也不够高, 此外,客户端和后端的研发模式也完全不同 ...

  9. 使用npm install安装项目依赖的时候报错

    使用npm install安装项目依赖的时候报错: npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sass@4.14.1 postin ...

  10. jmeter-命令行执行及测试报告导出

    问题1:GUI方式能够进行测试报告导出? 回答:目前找了很多资料,没有找到采用GUI方式测试完成,然后命令方式导出测试报告: 问题2:命令行导出测试报告的前提都有啥?---- 这里参考了老_张大大的博 ...