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;
}