设为首页 收藏本站
查看: 1108|回复: 0

[经验分享] codeforces 476B.Dreamoon and WiFi 解题报告

[复制链接]

尚未签到

发表于 2015-10-2 09:50:35 | 显示全部楼层 |阅读模式
  题目链接:http://codeforces.com/problemset/problem/476/B
  题目意思:给出两个字符串str1, str2,其中,str1 只由 '+' 和 '-' 组成,而str2 由 '+','-'和'?'组成。初始点在原点0的位置,经过 str1 的变换最终会达到某一个位置,‘+'表示向右移动一个单位(+1),'-'即-1。str2 中 '?'的部分可以填入'+','-'其中一个符号。问能填充 '?' 的所有情况中,使得使用 str2 所有的操作,能到达   经过 str1 所有操作后到达的最终位置   的概率是多少。(额....比较拗口= =,俺的...表达能力果然不敢恭维- -!)
  首先,算出经过 str1 所有的操作后最终到达的位置,这个明显是确定的啦,没有 '?' 嘛。接着算出 str2 除 '?' 外到达的位置,剩下用深搜来填入 '?',统计等于最终位置的种数。最后用  这个种数 / 问号能填入的所有情况,就是答案啦!!!
  还有一些特判点,假如str2 没有问号,概率只有两种情况:1 或者 0。其他就要dfs算啦~~
  粗心过头,wa了两次: 无用%.12lf(又到考眼力的时候了= =) 还有调试 cnt 不记得注释了= =......
  



1 #include <iostream>
2 #include <cstdio>
3 #include <cstdlib>
4 #include <cstring>
5 #include <algorithm>
6 using namespace std;
7
8 const int maxn = 10 + 5;
9 char str1[maxn], str2[maxn];
10 int unknown, origin;
11 double cnt, fenmu;
12
13 void dfs(int c, int cur)
14 {
15     if (c == unknown)
16     {
17         if (cur == origin)
18             cnt++;
19         return;
20     }
21     dfs(c+1, cur+1);
22     dfs(c+1, cur-1);
23 }
24
25 int main()
26 {
27     #ifndef ONLINE_JUDGE
28         freopen("input.txt", "r", stdin);
29     #endif
30
31     while (scanf("%s%s", str1, str2) != EOF)
32     {
33         int len = strlen(str1);
34         origin = 0;
35
36         for (int i = 0; i < len; i++)
37         {
38             if (str1 == '+')
39                 origin += 1;
40             else
41                 origin -= 1;
42         }
43
44         int known = 0;
45         unknown = 0;
46         for (int i = 0; i < len; i++)
47         {
48             if (str2 == '?')
49                 unknown++;
50             else if (str2 == '+')
51                 known += 1;
52             else if (str2 == '-')
53                 known -= 1;
54         }
55         if (!unknown)
56         {
57             if (known != origin)
58                 printf("0.000000000000\n");
59             else
60                 printf("1.000000000000\n");
61         }
62         else
63         {
64             cnt = 0;
65             dfs(0, known);
66             fenmu = 1;
67             for (int i = 1; i <= unknown; i++)
68                 fenmu *= 2;
69             printf("%.12lf\n", (double)cnt/(double)fenmu);
70         }
71     }
72     return 0;
73 }
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-121614-1-1.html 上篇帖子: 电脑无线网变身WiFi热点(转载) 下篇帖子: IOS 获取当前Wifi的SSID
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表