Atcoder beginner contest 189

跳转题目
题目大意:给你n个逻辑运算符(and,or),求有多少个n+1元组能使得经过n次计算后结果为true。
思路:对于第i次运算,我们能够考虑到:(true,false的数目分别为num1,num0)

  1. 如果运算符为or,计算结果为:
    num1=2 ∗ * num1+num0;
    num0=num0 ∗ * 1;

  2. 如果运算符为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;
     
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值