zoukankan      html  css  js  c++  java
  • Noip2019暑期训练2

     

    题目名称

    骑士遍历

    和谐俱乐部

    农场派对

    对称二叉树

    存盘文件名

    knight

    Beautiful

    party

    tree

    输入文件名

    knight.in

    Beautiful.in

    party.in

    tree.in

    输出文件名

    knight.out

    Beautiful.out

    party.out

    tree.out

    时限

    1s

    1s

    1s

    1s

    内存限制

    128MB

    128MB

    128MB

    128MB

    1:骑士遍历(knight)

    【题目描述】

    楚继光判断邪狼可能藏在一个n×n的(n10)正方形区域,楚继光骑着战马从任一点Axy)开始,试图找出一条路径,使马不重复地走遍区域的每一个点。马走的规则是走“日”字,可向任意方向走。

    【输入格式】

    三个整数nx, yn代表棋盘大小,xy代表A点坐标,棋盘坐标从(00开始)。

    【输出格式】

    棋盘路径(搜索方向从最下方开始,依次逆时钟旋转)。

    【输入样例】

    5 2 0

    【输出样例】

    23 4 13 8 21

    12 7 22 3 14

    17 24 5 20 9

    6 11 18 15 2

    25 16 1 10 19


    这道题肥肠简单,深搜AC,我的代码如下: 

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[11][11],n;
     4 bool b[11][11];
     5 int dx[8]={1,2,2,1,-1,-2,-2,-1};//搜索是从{1,-2}开始的
     6 int dy[8]={-2,-1,1,2,2,1,-1,-2};//这里题目表述不清,但是增量一定要这样写!不然输出和答案不一
     7 void search(int x,int y,int t)
     8 {
     9     if(t==n*n)
    10     {
    11         for(int j=n-1;j>=0;j--)
    12         {
    13             for(int i=0;i<n;i++)
    14                 cout<<a[i][j]<<' ';
    15             cout<<endl;
    16         }
    17         exit(0);//讲解的时候老师说这里最好不要用强制退出,容易出错,再定义一个bool变量判断是否有路径就可以啦
    18     }
    19     for(int i=0;i<8;i++)
    20     {
    21         int p=x+dx[i],q=y+dy[i];
    22         if(p>=0&&p<n&&q>=0&&q<n&&!(b[p][q]))
    23         {
    24             b[p][q]=true;
    25             a[p][q]=t+1;
    26             search(p,q,a[p][q]);
    27             b[p][q]=false;
    28         }
    29     }
    30     
    31 }
    32 int main()
    33 {
    34     //freopen("knight.in","r",stdin);(考试的时候一定记得这两行不要写错啦!!!)
    35     //freopen("knight.out","w",stdout);(最好是一拿到题目就写,不怕一万就怕万一)
    36     int x,y;cin>>n>>x>>y;
    37     a[x][y]=1;b[x][y]=true;
    38     search(x,y,1);
    39     cout<<"-1";//本题数据有bug,会出现没有解决方案的情况,此时输出“-1”
    40     return 0;
    41 }

    2和谐俱乐部(Beautiful

    【题目描述】

    “木秀于林,风必摧之;堆出于岸,流必湍之;行高于人,众必非之”,人类最可怕的罪之一,就是嫉妒。它生出许多最黑暗、污秽的罪行,使魔法世界的历史为之蒙羞。

    魔法学院的某一个私人俱乐部有N个会员,每一个会员都是既美丽又强壮的,我们以A代表强壮,以B代表美丽。但他们都有一个缺点是嫉妒。例如i会员嫉妒j会员的条件是:Ai Aj并且Bi BjAi Aj并且BiBj,但是如果j会员的美丽和强壮都不如i会员,则i会员会忽视j会员的存在。而如果j会员的美丽和强壮都强于i会员的话,则i会员会非常尊敬j会员。

    为了庆祝新年的到来,俱乐部经理准备组织一次舞会,但是他担心各会员之间由于嫉妒而引发争斗。所以,邀请哪些会员前来参加舞会实在是伤透了经理的脑筋。那么,精通电脑编程的你,能告诉经理发放邀请函最多人数是多少吗?

    【输入格式】

    第一行为整数N2N10000),代表N个会员。

    剩下N行为每个会员的A值和B值。( 1AiBi 109 )

    【输出格式】

    一行为最大邀请人数。

    【输入样例】

    4

    1 1

    1 2

    2 1

    2 2

    【输出样例】

    2


     

    这道题呢就是先排序,然后再求最长上升子序列(DP),没有一点技巧!只不过要仔细看题目:如果j会员的美丽和强壮 都 不如i会员,则i会员会忽视j会员的存在。而如果j会员的美丽和强壮 都 强于i会员的话,则i会员会非常尊敬j会员。我的修改后的代码(这道题一开始只得了部分分)如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,mi;
     4 struct node{
     5     int a,b,l;
     6     bool operator <(const node &y)const
     7     {
     8         return a<y.a;
     9     }
    10 }x[10001];
    11 int main()
    12 {
    13     //freopen("Beautiful.in","r",stdin);
    14     //freopen("Beautiful.out","w",stdout);
    15     cin>>n;
    16     for(int i=1;i<=n;i++)
    17     {
    18         cin>>x[i].a>>x[i].b;
    19         x[i].l=1;
    20     }
    21     sort(x+1,x+n+1);
    22     for(int i=n-1;i>=1;i--)
    23     {
    24         mi=0;
    25         for(int j=i+1;j<=n;j++)
    26         {
    27             if(x[i].b<x[j].b&&x[j].l>mi&&x[i].a<x[j].a)//一开始我没写x[i].a<x[j].a,因此错了两个点,所以说题目一定要看清楚!
    28             {
    29                 mi=x[j].l;
    30             }
    31         }
    32         x[i].l=mi+1;
    33     }
    34     mi=x[1].l;
    35     for(int i=1;i<=n;i++)
    36         if(x[i].l>mi)mi=x[i].l;
    37     cout<<mi;
    38     return 0;
    39 }

    3:农场派对party)

    此题详情和代码请见↓↓↓

    农场派对(party)(信息学奥赛一本通 1497) - endl - 博客园  https://www.cnblogs.com/ljy-endl/p/11285884.html


    4对称二叉树(tree)

     

    此题详情和代码请见↓↓↓

    【18NOIP普及组】对称二叉树(信息学奥赛一本通 1981)(洛谷 5018) - endl - 博客园  https://www.cnblogs.com/ljy-endl/p/11281818.html

  • 相关阅读:
    Jquery学习系列-制作Menu
    关于javascript里的parseInt() 与 parseFloaat() 文本转换为数字
    javascript简述
    【代码片段】HTML5基本结构及常用默认模版
    赋值运算符
    【代码片段】jQuery实现页面滚动时层智能浮动定位Fixed Floating Elements
    【代码片段】formLogin
    算数运算符
    关于javascript里的toFixed()方法格式化数字
    关于javascript里的setTimerout()设定时间
  • 原文地址:https://www.cnblogs.com/ljy-endl/p/11285923.html
Copyright © 2011-2022 走看看