请选择 进入手机版 | 继续访问电脑版

衔尾蛇

[复制链接]
孤单 发表于 2021-1-2 12:15:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
链接:https://ac.nowcoder.com/acm/contest/9854/D
泉源:牛客网
光、对立和小红三个人在玩捉蛇游戏。
已知蛇有三种:红蛇、蓝蛇和绿蛇。蛇可以咬住自己的尾巴,形成衔尾蛇。每条蛇可以咬住自己的尾巴,也可以咬住别的蛇的尾巴。
一共有条红蛇,条蓝蛇,条绿蛇。她们想知道一共可以形成多少种差别的衔尾蛇的环?
注:蛇可以不消全部用完。
输入形貌:
一行三个非负整数:、和
输出形貌:
一个整数,为方案的数量。
示例1
输入
复制
1 1 1
输出
复制
8
说明
一条红蛇咬自己,一种方案。
一条蓝蛇咬自己,一种方案。
一条绿蛇咬自己,一种方案。
一条红蛇和一条蓝蛇相互咬对方的尾巴,一种方案。
一条红蛇和一条绿蛇相互咬对方的尾巴,一种方案。
一条绿蛇和一条蓝蛇相互咬对方的尾巴,一种方案。
三条蛇相互咬,红咬绿,绿咬蓝,蓝咬红,一种方案。
三条蛇相互咬,红咬蓝,蓝咬绿,绿咬红,一种方案。
一共8种方案。
示例2
输入
复制
1 0 0
输出
复制
1
说明
一条红蛇咬自己,显然只有这一种方案。
示例3
输入
复制
3 0 0
输出
复制
3
说明
一条红蛇咬自己,一种方案。
两条红蛇相互咬对方的尾巴,为一种方案。
三条赤色相互咬,也是一种方案(1咬2的尾巴,2咬3的尾巴,3咬1的尾巴)
备注:
数据范围:
1 \leq a+b+c \leq 121≤a+b+c≤12
递归的时候一定不要写+=
[code]#include #include #include #include #include using namespace std;unordered_map und;int a, b, c;int ans;void dfs(string str){        string s;        s += str;        s += str;                if (str != ""){                bool flag = false;                for (int i = 0; i < str.size(); i ++){                        if (und[s.substr(i, str.size())])                        flag = true;                }                if (!flag){                        und[str] = true;                //        cout  0){                b --;                dfs(str + &#39;b&#39;);                b ++;        }                if (c > 0){                c --;                dfs(str + &#39;c&#39;);                c ++;        }}int main(){        scanf("%d%d%d", &a, &b, &c);                dfs("");                cout
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )