跳转题目
题目大意:给你n个逻辑运算符(and,or),求有多少个n+1元组能使得经过n次计算后结果为true。
思路:对于第i次运算,我们能够考虑到:(true,false的数目分别为num1,num0)
-
如果运算符为or,计算结果为:
num1=2 ∗ * ∗ num1+num0;
num0=num0 ∗ * ∗ 1; -
如果运算符为and,计算结果为:
num0=2 ∗ * ∗ num0+num1;
num1=num1 ∗ * ∗ 1;
然后模拟就行了,细节看代码。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+100;
int inf=0x3f3f3f3f;
int mod=1e9+7;
typedef long long ll;
typedef pair <ll,ll>pa;
ll num0=1,num1=1;
int a[100];
int main()
{
ios::sync_with_stdio(0);cin.tie(0);
int n;cin>>n;
for(int i=1;i<=n;i++){
string s;
cin>>s;
if(s=="AND") a[i]=0;
else a[i]=1;
}
for(int i=1;i<=n;i++) {
if(a[i]==1) num1=2*num1+num0;
else num0=2*num0+num1;
}
cout<<num1<<endl;
return 0;
}