e multiple possible answers, you are allowed to print any of them. Sample test(s) Input
4
0 1 1 0
Output
YES
(((0)->1)->(1->0))
Input
2
1 1
Output
NO
Input
1
0
Output
YES
0
?
题目大意:给四个转移式子,然后给一个0/1串问是否存在某总计算方式使得最后答案为0,存在则输出任意一种合法的方式
?
?
题目分析:从给的四个式子中可以发现如果结果要为0,最后一位必须是0,现在要做的就是再最后一个0之前构造1,我们可以发现如果最后一个0的前面一个是1,那么不管这个1之前是什么最后答案都是1,因为0 ->1=1,1 ->1=1,即与前面的值无关,所以我们转过来考虑不可能的情况,考虑最后一个0的前面是0,因为要构1,又0->0=0,1->0=0也就是说这个0前面不能是1,依次类推可以得到,如果倒数第二个0的前面都是1,那必然无解,否则就有解
?
?
#include
#include
int const MAX = 1e6 + 5; int n, a[MAX]; int main() { scanf(%d, &n); for(int i = 1; i <= n; i++) scanf(%d, &a[i]); if(n == 1) //特判一个数 { if(a[1] == 1) printf(NO ); else printf(YES 0 ); return 0; } if(a[n] == 1) { printf(NO ); return 0; } bool flag = false; for(int i = 1; i <= n - 2; i++) { if(a[i] != 1) { flag = true; break; } } if(!flag && a[n - 1] == 0 && a[n] == 0) //1111111 1 0Y 0 0N { printf(NO ); return 0; } printf(YES ); for(int i = 1; i <= n - 2; i++) printf((%d->, a[i]); printf(%d, a[n - 1]); for(int i = 1; i <= n - 2; i++) printf()); printf(->0 ); }
?
?
D也是个构造,没来及补