2019牛客暑期多校训练营(第三场)B题、H题
题意:
就是说给你一个由0或1组成的字符串,让你找出来一个0的数量和1的数量相等的最长子字符串和最长子序列
题解:
可以把0当作-1,把1当作1来计算字符串的前缀和
这样的话,当两个位置的前缀和的值相同的时候,那么这两个位置中间的部分就满足题意,除此之外前缀和为0的地方也满足题意
因为这是前缀和,当两个位置前缀和相同就可以让后一个减去前一个前缀和,那么这中间一段便是0和1相同的长度
为了防止出现负数下标,可以让计算出来的前缀和加上一个大正数
代码一:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<algorithm>
5 using namespace std;
6 char a[100005];
7 int ans[200005][2];
8 int sum[100005];
9 int main()
10 {
11 int n;
12 int s1=0,s0=0,maxx=0;
13 sum[0]=0;
14 scanf("%d",&n);
15 scanf("%s",a);
16 ans[100000][0]=-1;
17 for(int i=0;i<n;i++)
18 {
19 if(a[i]=='1')
20 {
21 s1++;
22 sum[i]=sum[i-1]+1;
23 }
24 else
25 {
26 s0++;
27 sum[i]=sum[i-1]-1;
28 }
29 if(ans[sum[i]+100000][0]==0)
30 {
31 ans[sum[i]+100000][0]=i;
32 }
33 else
34 {
35 ans[sum[i]+100000][1]=i;
36
37 maxx=max(maxx,ans[sum[i]+100000][1]-ans[sum[i]+100000][0]);
38 }
39 }
40 if(s0==s1)
41 {
42 printf("%d %d\n",s0+s1,s0+s1);
43 }
44 else if(s0<s1)
45 {
46 printf("%d %d\n",maxx,s0*2);
47 }
48 else if(s0>s1)
49 {
50 printf("%d %d\n",maxx,s1*2);
51 }
52 return 0;
53 }
代码二:
1 #include <bits/stdc++.h>
2
3 #define ll long long
4
5 using namespace std;
6
7 const int N=1e5+10;
8
9 int pre[2*N];
10
11 char s[N];
12
13 int main(void)
14
15 {
16
17 int n,sum=0,cnt0=0,cnt1=0,ans=0;
18
19 scanf("%d%s",&n,s+1);
20
21 for(int i=1;i<=n;i++)
22
23 {
24
25 if(s[i]=='0') cnt0++,sum++;
26
27 else cnt1++,sum--;
28
29 if(sum==0)
30
31 {
32
33 if(ans<i) ans=i;
34
35 continue;
36
37 }
38
39 if(pre[sum+n]==0) pre[sum+n]=i;
40
41 else if(i-pre[sum+n]>ans)
42
43 ans=i-pre[sum+n];
44
45 }
46
47 printf("%d %d\n",ans,min(cnt0,cnt1)*2);
48
49 return 0;
50
51 }
H题:
原文:https://blog.csdn.net/code92007/article/details/97305323
1 #include<bits/stdc++.h>
2
3 using namespace std;
4
5 const int N=1e3+5;
6
7 const int off=1e8;
8
9 int t,n;
10
11 struct node
12
13 {
14
15 int x,y;
16
17 }e[N],c,d;
18
19 bool operator<(node a,node b)
20
21 {
22
23 return a.y<b.y||(a.y==b.y&&a.x<b.x);
24
25 }
26
27 int main()
28
29 {
30
31 scanf("%d",&t);
32
33 while(t--)
34
35 {
36
37 scanf("%d",&n);
38
39 for(int i=1;i<=n;++i)
40
41 scanf("%d%d",&e[i].x,&e[i].y);
42
43 sort(e+1,e+n+1);
44
45 c=e[n/2];d=e[n/2+1];
46
47 if(c.y==d.y)printf("%d %d %d %d\n",c.x+off,c.y-1,d.x-off,d.y+1);
48
49 else printf("%d %d %d %d\n",c.x+off,c.y,d.x-off,d.y);
50
51 }
52
53 return 0;
54
55 }
2019牛客暑期多校训练营(第三场)B题、H题的更多相关文章
- 2019牛客暑期多校训练营(第三场)H题目
题意:给你一个N×N的矩阵,求最大的子矩阵 满足子矩阵中最大值和最小值之差小于等于m. 思路:这题是求满足条件的最大子矩阵,毫无疑问要遍历所有矩阵,并判断矩阵是某满足这个条件,那么我们大致只要解决两个 ...
- 2019牛客暑期多校训练营(第三场)- F Planting Trees
题目链接:https://ac.nowcoder.com/acm/contest/883/F 题意:给定n×n的矩阵,求最大子矩阵使得子矩阵中最大值和最小值的差值<=M. 思路:先看数据大小,注 ...
- 2019牛客暑期多校训练营(第三场) F.Planting Trees(单调队列)
题意:给你一个n*n的高度矩阵 要你找到里面最大的矩阵且最大的高度差不能超过m 思路:我们首先枚举上下右边界,然后我们可以用单调队列维护一个最左的边界 然后计算最大值 时间复杂度为O(n*n*n) # ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
随机推荐
- 【Flutter】功能型组件之跨组件状态共享
前言 在Flutter开发中,状态管理是一个永恒的话题. 一般的原则是:如果状态是组件私有的,则应该由组件自己管理:如果状态要跨组件共享,则该状态应该由各个组件共同的父元素来管理. 对于组 ...
- Flutter 布局类组件:线性布局(Row和Column)
前言 所谓线性布局,即指沿水平或垂直方向排布子组件.Flutter中通过Row和Column来实现线性布局,并且它们都继承自弹性布局(Flex). 接口描述 Row({ Key key, // 表示子 ...
- mmall商城购物车模块总结
购物车模块的设计思想 购物车的实现方式有很多,但是最常见的就三种:Cookie,Session,数据库.三种方法各有优劣,适合的场景各不相同.Cookie方法:通过把购物车中的商品数据写入Cookie ...
- HAProxy-1.8.20 根据后缀名转发到后端服务器
global maxconn 100000 chroot /data/soft/haproxy stats socket /var/lib/haproxy/haproxy.sock mode 600 ...
- QPainter 绘制图像接口
阅读本文大概需要 3 分钟 我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个 void drawI ...
- 【Linux】awk想打印制定列以后的所有列
今天偶然研究awk,有一个文件,文件内容是全篇的1 2 3 4 5 6 7 8 9 0 现在想打印除了第一列意外的所有列 文件内容: [root@localhost ~]# cat test.txt ...
- 【Linux】ssh互信脚本
使用互信脚本的时候,需要敲回车,但是shell脚本无法满足,所以需要用到expect脚本 rpm -qa | grep expect 如果没有的话,直接用yum安装即可 yum install exp ...
- 使用 TensorBoard 可视化模型、数据和训练
使用 TensorBoard 可视化模型.数据和训练 在 60 Minutes Blitz 中,我们展示了如何加载数据,并把数据送到我们继承 nn.Module 类的模型,在训练数据上训练模型,并在测 ...
- [XAML] 使用 XAML 格式化工具:XAML Styler
1. XAML 的问题 刚入门 WPF/UWP 之类的 XAML 平台,首先会接触到 XAML 这一新事物.初学 XAML 时对它的印象可以归纳为一个词:一坨. 随着我在 XAML 平台上工作的时间越 ...
- [Usaco2007 Dec]宝石手镯
题目描述 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为W_i(1 & ...