传送门
题目描述
输入描述
输出描述
数据范围
输入样例
3 3 101 4 1011 5 10001
输出样例
Yes No No
简单题,暴力枚举判断即可(不知道为什么被我写的很复杂)。
对于 1 ,判断相邻两边是否都为 0;对于 0 ,判断相邻两边是否至少存在一个 1;不符合要求时直接 break。
边界特判即可。
参考代码
#includeusing 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"< 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。
参考代码
#includeusing 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<



