acwing第19场周赛(A/B)

3991. 满足条件的01串

传送门

题目描述

在这里插入图片描述

输入描述

在这里插入图片描述

输出描述

在这里插入图片描述

数据范围

在这里插入图片描述

输入样例

3
3
101
4
1011
5
10001

输出样例

Yes
No
No

简单题,暴力枚举判断即可(不知道为什么被我写的很复杂)。

对于 1 ,判断相邻两边是否都为 0;对于 0 ,判断相邻两边是否至少存在一个 1;不符合要求时直接 break。

边界特判即可。

参考代码

#include <bits/stdc++.h>
using namespace std;

int main(){
    
    
    int t;
    cin>>t;
    while(t--){
    
    
        int n,flag=0,cnt=0,tag=0;
        string s;
        cin>>n>>s;
        if(s[0]=='1')
            cnt++;
        if(s[0]=='0')
            flag=1;
        if(n==1&&s[0]=='0'){
    
    
            cout<<"No"<<endl;
            continue;
        }
        if(s[n-1]=='0'&&s[n-2]=='0'){
    
    
            cout<<"No"<<endl;
            continue;
        }
        for(int i=1;i<n;i++){
    
    
            if(cnt==1&&s[i]=='1'){
    
    
                tag=1;
                break;
            }
            if(flag==1&&s[i]=='0'){
    
    
                tag=1;
                break;
            }
            if(s[i]=='1')
                cnt++,flag=0;
            if(s[i]=='0'){
    
    
                if(s[i-1]!='1')
                    flag=1;
                cnt=0;
            }
        }
        
        if(tag)
            cout<<"No"<<endl;
        else
            cout<<"Yes"<<endl;
    }
    
    return 0;
}

3992. 树上有猴

传送门

题目描述

在这里插入图片描述

输入描述

在这里插入图片描述

输出描述

在这里插入图片描述

数据范围

在这里插入图片描述

输入样例1

3 5
2 1 -3

输出样例1

3

输入样例2

2 4
-1 1

输出样例2

4

输入样例3

4 10
2 4 1 2

输出样例3

2

利用前缀和不断更新当前时刻树上猴子变动的数量,并不断维护在这些时刻内增加的最大只数,及减小的最大只数,并与树上能够容纳的最多只数 w 进行比较。

例:n = 3 , w = 7 , a = [ 1 , 2 , - 5 ] ,则树上最多将增加 3 只猴子,最多将减少 2 只猴子;

由最多将增加 3 只猴子而最多能容纳 7 只猴子可得:初始时的可能性为 0,1,2,3,4;

由最多将减少 2 只猴子可得,初始时必然需要大于等于 2 只猴子。

最后的答案即为 7 - 3 + 1 - 2 = 3。

参考代码

#include <bits/stdc++.h>
using namespace std;

int n, w, a[1005];

int main() {
    
    
    cin>>n>>w;
    int minn = 0, maxx = 0;
    for (int i = 1; i <= n; ++i) {
    
    
        cin>>a[i];
        a[i] += a[i - 1];
        if (a[i] > maxx) maxx = a[i];
        if (a[i] < minn) minn = a[i];
    }
    if (-minn > w - maxx) puts("0");
    else cout<<w - maxx + minn + 1<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/laysan/article/details/120619859