UESTC1013-我的魔法栈-模拟/排列组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UESTC1013-我的魔法栈-模拟/排列组合相关的知识,希望对你有一定的参考价值。

有一个串,有黑色和白色两种元素。一次操作可以把最上面的白色元素变成黑色,同时把这个元素上面的所有元素变成白色。

给你一个30以内的串,计算变成全黑时,元素变化的总和。

我用的方法比较笨,打表处理了1-30个全白串变黑的ans,然后模拟,借助打表的结果计算出答案。

其实,每出现一个白色元素 cnt+=(1<<i+1)-1即可;

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 int T,N;
 8 char str[100];
 9 int flag;
10 long long ans;
11 int table[35] = {0,1,4,11,26,57,120,247,502,1013,2036,4083,8178,16369,32752,65519,131054,262125,524268,1048555,2097130,4194281,8388584
12                     ,16777191,33554406,67108837,134217700,268435427,536870882,1073741793,2147483616};
13 int main()
14 {
15     scanf("%d",&T);
16     while(T--)
17     {
18         scanf("%d%s",&N,str);
19         ans = 0;
20         while(true)
21         {
22             flag = 0;
23             //printf("str:%s\n",str);
24             for(int i=0;i<N;i++)
25             {
26                 if(str[i]==W)
27                 {
28                     for(int j=0;j<i;j++)
29                     {
30                         if(str[j] == B)
31                             ans++;
32                         else if(str[j] == W)
33                             str[j] == B;
34                     }
35                     ans += table[i];
36 
37                     str[i] = B;
38                     ans++;
39 
40                     flag = 1;
41                     break;
42                 }
43             }
44 
45             if(!flag)
46             {
47                 printf("%lld\n",ans);
48                 break;
49             }
50         }
51     }
52 }

 

以上是关于UESTC1013-我的魔法栈-模拟/排列组合的主要内容,如果未能解决你的问题,请参考以下文章

感受Vue3的魔法力量

CodeForces512C-Pluses everywhere-模拟/数学/排列组合模板

Catalan数与出栈顺序个数,Java编程模拟

UESTC - 1544 当咸鱼也要按照基本法 组合数学 容斥原理

11.2晚校内测试装桶模拟单调栈

UESTC #1919 一棵复杂的线段树