题意:
一个01串是否合法满足以下两个要求:
1.没有两个相邻的1;
2.在满足第一个条件的情况下,不能再放下更多的1。
判断一个给定的串是否合法。
思路:
最近cf的A怎么都这么坑啊。。。
首先是判断长度为1的情况,为0是No,1就是Yes;
然后判断长度大于1的,有2种一般情况,11,000
2种特殊情况,开头两个0,结尾两个0。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 int main() 6 { 7 int n; 8 char s[1005]; 9 scanf("%d%s",&n,s); 10 bool f = 0; 11 if (n == 1 && s[0] == '0') 12 { 13 f = 1; 14 } 15 for (int i = 0;i < n-1;i++) if(s[i] == '1' && s[i+1] == '1') f = 1; 16 for (int i = 0;i <= n-2;i++) 17 { 18 if (i == 0) 19 { 20 if (s[i] == '0' && s[i+1] == '0') f = 1; 21 } 22 else if (i == n - 2) 23 { 24 if (s[i] == '0' && s[i+1] == '0') f = 1; 25 } 26 else 27 { 28 if (s[i] == '0' && s[i+1] == '0' && s[i+2] == '0') f = 1; 29 } 30 } 31 if (f) puts("No"); 32 else puts("Yes"); 33 return 0; 34 }