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 }

最新文章

  1. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
  2. VS2013 破解
  3. 纪念逝去的岁月——C++实现一个栈
  4. 对数组进行malloc动态分配的一些总结
  5. Codeforces Round #331 (Div. 2)
  6. TCP 粘包/拆包问题
  7. Intent相关
  8. linux 操作总结
  9. MVC路由中routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;) 到底什么意思!
  10. 根据权限显示隐藏SharePoint 2010快速启动栏的链接
  11. scrapy使用爬取多个页面
  12. jsp调用javabean出现错误HTTP Status 500 - Unable to compile class for JSP
  13. Java中的字符串流的读取和写入(创建文件并判断重复账户)
  14. Oracle SQL in 超过1000 的解决方案
  15. python3 流程控制
  16. Activity间传递数据
  17. Hadoop源码分析(3): Hadoop的运行痕迹
  18. mysql根据分组和条件查询以后如何统计记录的条数
  19. 元组tuple 可迭代对象
  20. Day02 (黑客成长日记)

热门文章

  1. 【SpringBoot1.x】SpringBoot1.x 任务
  2. 第一章计算机网络概述---OSI七层网络模型
  3. redis持久化怎么选?成年人从来不做选择...
  4. MySQL where 条件字句查询
  5. ctfhub技能树—信息泄露—git泄露—Stash
  6. 用 CSS background 实现刻度线的呈现
  7. mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String
  8. Kubernetes集群管理工具kubectl命令技巧大全
  9. Docker容器日志清理方案
  10. 转 Jmeter测试实践:文件上传接口