码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 题解:ABC319C - False Hope


    题解:ABC319C - False Hope

    ·题目

    链接:Atcoder。

    链接:洛谷。

    ·难度

    算法难度:B。

    思维难度:B。

    调码难度:A。

    综合评价:普及/提高-。

    ·算法

    深度优先搜索。

    ·思路

    利用深度优先搜索,找出每一种选取各点的顺序,然后分别按行、列、对角线判断它是否会失望,无论如何方案总数(s)都加一,如果失望了b(记录失望次数)就加一。

    答案自然是经过精度处理后的(s-b)/s。

    ·代价

    O(1),因为3是常数,但是9!也够了。

    ·细节

    输出18位小数就行啦。

    ·代码

    1. #include
    2. using namespace std;
    3. struct Info{
    4. int td,tn;
    5. bool operator<(Info ot){
    6. return td
    7. }
    8. };
    9. Info inf[4]={};
    10. //inf存储的是每次判定的一整行、列、对角线里个点出现的次序和上面的数
    11. int num[4][4]={},q[4][4]={},b=0,s=0;
    12. //num就是点上面的数,q是整体出现次序,b是失望次数,s总次数
    13. bool bl[4][4]={};
    14. //bl就是记录dfs过程中某个点选过与否
    15. inline void dfs(int d);
    16. int main(){
    17. for(int i=1;i<=3;i++){
    18. for(int j=1;j<=3;j++){
    19. cin>>num[i][j];
    20. }
    21. }
    22. //输入
    23. dfs(1);
    24. //dfs入口:开始处理第一个
    25. printf("%.18lf",double(double(s-b)/double(s)));
    26. //输出经过处理的答案
    27. return 0;
    28. }
    29. inline void dfs(int d){
    30. if(d==10){
    31. //都处理完了
    32. s++;
    33. //总次数+1
    34. bool f=false;
    35. //记录不失望
    36. for(int i=1;i<=3;i++){
    37. inf[1]={q[i][1],num[i][1]};
    38. inf[2]={q[i][2],num[i][2]};
    39. inf[3]={q[i][3],num[i][3]};
    40. sort(inf+1,inf+4);
    41. if(inf[1].tn==inf[2].tn){
    42. f=true;
    43. }
    44. }
    45. //每行判断
    46. for(int i=1;i<=3;i++){
    47. inf[1]={q[1][i],num[1][i]};
    48. inf[2]={q[2][i],num[2][i]};
    49. inf[3]={q[3][i],num[3][i]};
    50. sort(inf+1,inf+4);
    51. if(inf[1].tn==inf[2].tn){
    52. f=true;
    53. }
    54. }
    55. //每列判断
    56. inf[1]={q[1][1],num[1][1]};
    57. inf[2]={q[2][2],num[2][2]};
    58. inf[3]={q[3][3],num[3][3]};
    59. sort(inf+1,inf+4);
    60. if(inf[1].tn==inf[2].tn){
    61. f=true;
    62. }
    63. inf[1]={q[1][3],num[1][3]};
    64. inf[2]={q[2][2],num[2][2]};
    65. inf[3]={q[3][1],num[3][1]};
    66. sort(inf+1,inf+4);
    67. if(inf[1].tn==inf[2].tn){
    68. f=true;
    69. }
    70. //对角线判断
    71. if(f==true){
    72. //如果失望了就增加失望总数
    73. b++;
    74. }
    75. }else{
    76. //继续处理
    77. for(int i=1;i<=3;i++){
    78. for(int j=1;j<=3;j++){
    79. if(bl[i][j]==false){
    80. //找到一个没被用过的点
    81. bl[i][j]=true;
    82. q[i][j]=d;
    83. //记录“已被用过”并记录出现次序
    84. dfs(d+1);
    85. //往下跑
    86. bl[i][j]=false;
    87. //回溯
    88. }
    89. }
    90. }
    91. }
    92. }

    ·注意

    精度处理要转为double。

  • 相关阅读:
    Python 如何实现外观设计模式?什么是 Facade 外观设计模式?Python 设计模式示例代码
    Dijkstra、A*算法python实现及对比分析
    (2022|CVPR,无语言模型,StyleGAN2,CLIP,图文特征对齐)LAFITE:迈向文本到图像生成的无语言训练
    深度学习与python theano
    如何搬运视频赚钱?
    使用表单登录方法模拟登录通信人家园,要求发送登录请求后打印出来的用户名下的用户组类别
    面渣逆袭:MySQL六十六问,两万字+五十图详解!有点六!
    Spring MVC LocaleResolver原理解析
    尚硅谷mysql2
    springMvc57-简单的拦截器
  • 原文地址:https://blog.csdn.net/sluckystar/article/details/132790690
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号