zoukankan      html  css  js  c++  java
  • Codeforces 399B

    传送门

    题意:你有一个栈,栈有n个球,球有蓝红色。定义

      1.当栈顶为红球时,不断移除栈顶元素

      2.将栈顶的蓝球更换为红球

      3.向栈里填充蓝球只至栈有n个球

    为一次操作

    问在第几次操作的过程中,栈内全部为红球

    我们定义栈顶为第零层。在游戏为结束之前,我们必定能找到一个蓝色的球,满足其比其小的层次全为红球。定义将第i层及其上方所有球变为红色需要的操作次数为F(i)

    F(0)=1;

    F(1)=1+F(0)=2;//1代表第一次操作,结果是将i层变为红球,0~i-1层全变为蓝色球

    F(2)=1+F(0)+F(1)=4;

    F(3)=1+F(0)+F(1)+F(2)=8;

    我们可以发现F(i)等同于2^i。

    原因嘛...红球相当于二进制中的1,蓝球相当于0。蓝球(0)上层都是红球(1),那么只需1即可进位,进位后补零。题意求的就是给定状态对应的大小与2^n的差值

    很多有二元表示外加一顿奇怪的操作或复杂的模拟的题目,无论是用球,状态,数字,都应该联想到二进制表示。特别是如这种题目中1<=n<=50这么小的情况

     1 #include <cstdio>
     2 using namespace std;
     3 typedef long long LL;
     4 
     5 int n;
     6 LL ans = 0;
     7 
     8 int main(int argc, const char * argv[]) {
     9     scanf("%d", &n);
    10     getchar();
    11     for (int i = 0; i <= n - 1; i++) {
    12         if (getchar() == 'B') ans |= ((LL)1 << i); //注意这里的类型转化QAQ
    13     }
    14     printf("%lld
    ", ans);
    15     return 0;
    16 }
  • 相关阅读:
    linux 内网环境搭建docker
    docker 容器迁移
    linux 按照进程号查看端口号
    docker 开机自启动
    0_campgrounds CRUD
    Delete Product
    new-Category-default category show
    Edit
    Mongoose with express-1
    Mongoose With Express _0: Basic Setup
  • 原文地址:https://www.cnblogs.com/xFANx/p/7347931.html
Copyright © 2011-2022 走看看