zoukankan      html  css  js  c++  java
  • 人工智能

    题目描述
    人胖了就容易打瞌睡,打瞌睡又会导致长胖,这对小X的减重计划很不利,于是小X决定做点动脑子的事来抵御瞌睡虫的进袭,小X决定响应国务院的号召投身到人工智能的研究开发大潮中去,具体研究什么好呢?小X再三思考后决定开发国际象棋的人工智能软件,虽然国际象棋的软件已经能够战胜人类世界冠军了,但那是基于搜索的 AI(AI 是人工智能的简称),小X想写一个基于机器学习的国际象棋 AI,目标是战胜 IBM 的深蓝,小X的国际象棋水平也不差,曾获得过市青少年比赛的冠军,机器学习顾名思义就是让机器像人一样学习,小X首先训练机器学习棋子对棋盘的控制,具体做法是小X先在棋盘上放置若干个车和后,然后让机器判断有多少个格子没有被车和后控制到。
    车和后的吃子规则如下:车:横、竖均可以走,步数不受限制,但不能斜着走。后:横、竖、斜都可以走,步数不受限制。无论是车还是后都不能越过棋子去吃子,用作训练的国际象棋棋盘可以放大缩小,并不限于 8×8 的棋盘,车和后所在的位置当然是被控制的,它们能走到的位置也都被控制。

    输入
    第一行包含一个正整数 n,表示棋盘的大小
    接下来 n 行,每行 n 个整数,其中 0 表示棋盘上这个格子为空的,1 表示为车,2 表示为后

    输出
    一行一个整数,表示没有被控制到的格子数量

    样例输入
    复制样例数据
    5
    0 0 0 0 0
    0 1 0 1 0
    0 0 2 0 0
    0 1 0 1 0
    0 0 0 0 0
    样例输出
    4

    在这里插入图片描述
    提示

    红色格子为样例中被控制到的格子,中间那个后能够斜着走到四个角落的格子(图中白色的格子),但因受到四个车的阻隔而不能控制到那四个格子!
    数据范围
    20%的数据,保证棋盘上只有车
    50%的数据,n<=50
    80%的数据,n<=200
    100%的数据,n<=1000,车的数量<=n*n,后的数量<=n

    #include <iostream>
    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n,i,j,k,m;
        scanf("%d",&n);
        int a[n][n];
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(a[i][j]==1)
                {
                    for(k=1;i-k>=0;k++)
                    {
                        if(a[i-k][j]==0||a[i-k][j]==3)
                        a[i-k][j]=3;
                        else break;
                    }
                    for(k=1;i+k<=n-1;k++)
                    {
                        if(a[i+k][j]==0||a[i+k][j]==3)
                        a[i+k][j]=3;
                        else break;
                    }
                    for(k=1;j-k>=0;k++)
                    {
                        if(a[i][j-k]==0||a[i][j-k]==3)
                        a[i][j-k]=3;
                        else break;
                    }
                    for(k=1;j+k<=n-1;k++)
                    {
                        if(a[i][j+k]==0||a[i][j+k]==3)
                        a[i][j+k]=3;
                        else break;
                    }
                }
                if(a[i][j]==2)
                {
                    for(k=1;i-k>=0;k++)
                    {
                        if(a[i-k][j]==0||a[i-k][j]==3)
                        a[i-k][j]=3;
                        else break;
                    }
                    for(k=1;i+k<=n-1;k++)
                    {
                        if(a[i+k][j]==0||a[i+k][j]==3)
                        a[i+k][j]=3;
                        else break;
                    }
                    for(k=1;j-k>=0;k++)
                    {
                        if(a[i][j-k]==0||a[i][j-k]==3)
                        a[i][j-k]=3;
                        else break;
                    }
                    for(k=1;j+k<=n-1;k++)
                    {
                        if(a[i][j+k]==0||a[i][j+k]==3)
                        a[i][j+k]=3;
                        else break;
                    }
                    for(m=1;i-m>=0&&j-m>=0;m++)
                    {
                        if(a[i-m][j-m]==0||a[i-m][j-m]==3)
                        a[i-m][j-m]=3;
                        else break;
                    }
                    for(m=1;i+m<=n-1&&j+m<=n-1;m++)
                    {
                        if(a[i+m][j+m]==0||a[i+m][j+m]==3)
                        a[i+m][j+m]=3;
                        else break;
                    }
                    for(m=1;i-m>=0&&j+m<=n-1;m++)
                    {
                        if(a[i-m][j+m]==0||a[i-m][j+m]==3)
                        a[i-m][j+m]=3;
                        else break;
                    }
                    for(m=1;i+m<=n-1&&j-m>=0;m++)
                    {
                        if(a[i+m][j-m]==0||a[i+m][j-m]==3)
                        a[i+m][j-m]=3;
                        else break;
                    }
                }
            }
        }
        int cnt=0;
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(a[i][j]==0)
                    cnt++;
            }
    
        }
        printf("%d
    ",cnt);
        return 0;
    }
    

    100多行可还行。

  • 相关阅读:
    HDU 1335 Basically Speaking(进制转换)
    2016年团体程序设计天梯赛-决赛 L2-3. 互评成绩(25)
    2016年团体程序设计天梯赛-决赛 L1-8. Left-pad(20)
    2016年团体程序设计天梯赛-决赛 L1-7. 到底是不是太胖了(10)
    2016年团体程序设计天梯赛-决赛 L1-6. 一帮一(15)
    2016年团体程序设计天梯赛-决赛 L1-5. 是不是太胖了(5)
    2016年团体程序设计天梯赛-决赛 L1-3. 出租(20)
    2016年团体程序设计天梯赛-决赛 L1-2. I Love GPLT(5)
    2016年团体程序设计天梯赛-决赛 L1-1. 正整数A+B(15)
    Codeforces Round #321 (Div. 2) C. Kefa and Park dfs
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319577.html
Copyright © 2011-2022 走看看