NC54340. 0还是1
描述
输入描述
第一行一个正整数n,表示给出的操作序列的长度。
第二行一个长度为n的字符串,表示给出的操作序列。
输出描述
一行一个整数,表示答案对取模后的结果。
示例1
输入:
3 &|^
输出:
8
说明:
合法的01序列有:C++14(g++5.4) 解法, 执行用时: 142ms, 内存消耗: 9336K, 提交时间: 2020-01-15 13:18:49
#include<bits/stdc++.h> const int mod=1e9+7; int n,l=1,r=1; char s[10000005]; int main(){ scanf("%d%s",&n,s+1); for(int i=1;i<=n;++i){ if(s[i]=='|') r=(r*2%mod+l)%mod; if(s[i]=='&') l=(l*2%mod+r)%mod; if(s[i]=='^') l=(l+r)%mod,r=l; } printf("%d",r); }
C++11(clang++ 3.9) 解法, 执行用时: 130ms, 内存消耗: 18188K, 提交时间: 2020-02-25 16:23:20
#include<bits/stdc++.h> const int mod=1e9+7; int n,l=1,r=1; char s[10000005]; int main() { scanf("%d%s",&n,s+1); for(int i=1;i<=n;++i) { if(s[i]=='|') r=(r*2%mod+l)%mod; if(s[i]=='&') l=(l*2%mod+r)%mod; if(s[i]=='^') l=(l+r)%mod,r=l; } printf("%d",r); }