首页 > 其他分享 >学而思4月月赛总结

学而思4月月赛总结

时间:2024-07-14 09:56:54浏览次数:5  
标签:总结 输出 学而思 Dont int 棋子 可多 know

概况:

\(T1\) \(T2\) \(T3\) \(T4\) \(T5\) \(T6\) \(T7\) \(T8\) \(sum\)
\(60\) \(60\) \(100\) \(4.8\) \(100\) \(50\) $ 0$ \(30\) \(404.8\)

未达到满分题:\(1,2,4,6,7,8\)

\(T1\)

题目描述

小 \(A\) 和可多喜欢互相切磋井字棋。井子棋就是在九宫格里面轮流放入 \(1\) 和 \(2\),谁连成 \(3\) 个就赢了。虽然小 \(A\) 很努力地记录棋谱,可还是下不过可多。由于小 \(A\) 比较笨,可多总是让他先。小 \(A\) 下的第一个子一定是在中心。这回小 \(A\) 希望使用计策。目前棋局刚开始,棋盘上有不大于 \(3\) 颗棋子,小 \(A\) 想知道,根据目前的局势,他有没有必胜策略(也就是自己以最佳方案下棋,无论对手怎么下,自己必胜)。

输入描述

共 \(3\)行,表示棋局,\(1\) 表示小 \(A\),\(2\) 表示可多,\(0\) 表示没有落子。保证棋子数不超过 \(3\) 个。

输出描述

共 \(2\) 行。
第 \(1\) 行,如果小 \(A\) 赢,输出 "A will win."
如果不知道,输出 "Dont know."
第 \(2\) 行,输出棋局刚开始时他们已经下了几个棋子。

样例1
输入
0 0 0
0 1 0
0 0 0
输出
Dont know.
1
样例2
输入
0 0 0
0 1 0
0 2 1
输出
A will win.
3
考场代码 \((60p)\):

正解思路:

由题目中可知,我们能够获取到 \(5\) 个直接条件,\(1\) 个推导条件:

  1. 在九宫格里面轮流放入 \(1\) 和 \(2\),连成 \(3\) 个就赢了
  2. 小 \(A\) 先
  3. 小 \(A\) 的第一个子一定是在中心
  4. \(1\) 表示小 \(A\),\(2\) 表示可多,\(0\) 表示没有落子
  5. 保证棋子数不超过 \(3\) 个
  6. 可多最多只有 \(1\) 个棋子

由于重重限制,使得这个问题没有太多的可能性,我们可以考虑使用 if语句判断来解决这个问题,直接且时间复杂度低。所以将所有的 Dont know 通过 if语句 排除,剩下的就是 A will win.

Dont know 情况:

  • 只有 \(1\) 个子
  • 可多下在角落
  • 有一列或一行全都落子
正解代码:
#include<bits/stdc++.h>
using namespace std;
int main(){ 
    int a[5][5],cnt=0;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            cin>>a[i][j];
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
          if(a[i][j]!=0)
              cnt++;
    if(cnt==1){
        puts("Dont know.");
        cout<<1;
        return 0;
    } 
    if(a[1][1]==2||a[1][3]==2||a[3][1]==2||a[3][3]==2){
        puts("Dont know.");
        cout<<cnt;
        return 0;
    } 
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++){
            a[i][4]=a[i][1]+a[i][2]+a[i][3];
            a[4][j]=a[1][j]+a[2][j]+a[3][j];
        }
    if(cnt==3){
        for(int i=1;i<=3;i++){
            if(a[i][4]==4||a[4][i]==4){
                puts("Dont know.");
                cout<<3;
                return 0; 
            }
        }
    } 
    puts("A will win.");
    cout<<cnt;
    return 0;
}

\(T2\)

\(T4\)

\(T6\)

\(T7\)

\(T8\)

标签:总结,输出,学而思,Dont,int,棋子,可多,know
From: https://www.cnblogs.com/cxy-xlf-1003/p/18301128

相关文章

  • 万字总结XGBoost原理、核心参数以及调优思路(下篇)
    万字总结XGBoost原理、核心参数以及调优思路(下篇)在数据科学领域,XGBoost以其卓越的性能和灵活性,成为了众多机器学习算法中的佼佼者。作为一种梯度提升框架,XGBoost通过构建决策树的集合来最小化一个可微分的损失函数,广泛应用于分类、回归等任务。本文将万字总结XGBoost的深层......
  • Resid核心问题总结(三)
    什么是缓存击穿?该如何解决缓存击穿是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞。缓存击穿的话,设置热点数据永远不过期。或者加上互斥锁就能搞定了。......
  • 【2023-2024第二学期助教总结】
    一、助教工作的具体职责和任务协助系里制作材料整理帮助老师批改作业回答学生问题考前给同学将题目二、助教工作的每周时长和具体安排每周四个小时批改作业实验课帮助老师给同学排错反馈同学问题,安排实验时间三、因为自己的助教工作,对课程、老师、学生的帮助和带来的改变(典......
  • Java第二周学习总结
    深入Java基础语法本周,我进一步理解Java中的基本数据类型和引用数据类型。学会了如何根据需求选择合适的数据类型。掌握了算术运算符、关系运算符、逻辑运算符以及位运算符的使用,能够编写简单的表达式进行计算和条件判断。并深入学习了if-else、switch-case、for、while、do-whi......
  • 7.12考试总结
    T1动态询问这个题主要考察快速排序求第k小O(n)的时间复杂度完成的方法主要错误原因在于,在一些情况下x与y并不连续,中间可能会各一个数,所以它的k需要注意这道在这个点上卡了很久,大概花费了1h左右,但感觉应该可以更快的解决,主要在于那道题没学好,一直记了一个错误的算法T2财富计算......
  • 2024暑假第二周总结
    运算符总结对字面量或者变量进行操作的符号算数运算符加减乘除取模取余加减乘publicclassyunsuanfu{publicstaticvoidmain(String[]args){//+System.out.println(3+2);//5//-System.out.println(3-2);//1//*......
  • 2024.07.13hadoop总结
    hadoop基础概念学习在这之前并不了解hadoop,甚至没怎么听人提起过,直到学习大数据技术需要hadoop和python才开始学习。               hadoop的概念还没有完全了解完全,但是它的核心是处理和存储大数据,需要在虚拟机上面进行系统的测试 ......
  • 小学期第二周个人总结
    本周,我投入了大量时间和精力来学习Hadoop生态系统的相关知识。Hadoop生态系统包括Hadoop、Hive和YARN等重要组件,它们在大数据处理和管理中发挥着关键作用。首先,我对Hadoop本身进行了深入了解。Hadoop是一个用于存储和处理大数据的开源框架,提供了分布式存储(HDFS)和分布式计算(MapRed......
  • 周总结
    这周主要练习springboot3+vue3,开发大事件系统,Hadoop还未开始学,计划完成大事件开发后冲击Hadoop,在这里主要说一下我后端的开发心里路程吧。SpringBoot是一种基于Spring框架的开发工具,它旨在简化Spring应用程序的开发和部署过程。作为一名后端开发人员,我对SpringBoot的使......
  • 第二周总结
    1​下载JDK,安装JDK并配置环境变量。​阅读大道至简三至六章学习异常处理​理解类和对象​2.​下一周准备学习继承和多态,接口和抽象类3.困难:语法复杂:Java的语法规则相对较多,理解并记忆这些规则需要一定的时间和努力。编程逻辑难以理解:编程不仅仅是记忆语法,更重要的是理解......