zoukankan      html  css  js  c++  java
  • 小 X 玩游戏(game)

    题目:

    时间限制 : 1 Sec
    内存限制 : 64 Mb
    提交 : 241
    解决 : 81

    题目描述

    听完了故事,小 X 又想去玩一会儿游戏了。 这是一个很奇特的单机游戏, 游戏规则如下:
    游戏中一共有 4× n 张牌,每张牌上有一个数字, 这些数字恰好是 1~4× n。一开始电脑会把这 4× n张牌随机打乱,然后会发 2× n 张牌给小 X。那些剩下的 2× n 牌电脑会再打乱一次,然后排成一排展示给小 X 看。而小 X 需要做的就是将自己的 2× n 张牌也排成一排,与电脑展示的 2× n 张牌一一对应。
    之后就开始评分了,对于前 n 对牌(一对牌是指小 X 的一张加上电脑的一张), 牌上数字小的一方获得一分; 而对于后 n 对牌, 牌上数字大的一方获得一分。
    例 如当 n=3 时, 共 有 12 张牌 , 牌 上的数字是 1 ~ 12 。 电脑打乱 后,小 X 拿到 6 张牌 , 假设 是1, 3, 4, 5, 7, 8。 此时电脑手中还剩下 2, 6,9, 10, 11, 12。同样假设电脑会将这 6 张牌按照 9, 11, 6, 2, 12, 10 这样的顺序展示给小 X 看。如果小 X 是将 6 张牌按 1, 7, 5, 8, 4, 3 这么排的,那么小 X 会获得 4 分。
    第 1 对: 1 – 9 ,小 X 得 1 分, 电脑得 0 分
    第 2 对: 7 –  11,小 X 得 1 分, 电脑得 0 分
    第 3 对: 5 –  6 ,小 X 得 1 分, 电脑得 0 分
    第 4 对: 8 –  2 ,小 X 得 1 分, 电脑得 0 分
    第 5 对: 4 –  12, 电脑得 1 分,小 X 得 0 分
    第 6 对: 3 –  10, 电脑得 1 分,小 X 得 0 分
    前一半第 1 对~第 3 对牌是比谁小,后一半第 4 对~第 6 对牌是比谁大。前一列数字代表的是小 X 的牌,后一列数字代表的是电脑的牌。
    小 X 现在已经拿到了 2× n 张牌,同时电脑也已经展示出了它的 2× n 张牌是怎么排列的,小 X 想知道他最多能够获得多少分?

    输入

    输入数据第一行为一个正整数 n。
    接下来一行共有 2× n 个用空格隔开的正整数, 表示小 X 手中拥有的 2× n 张牌。
    再下一行同样是 2× n 个用空格隔开的正整数, 表示电脑展示出的 2× n 张牌(以读入的顺序展示)。

    输出

    输出一行只有一个数ans, 表示小 X 最多能够获得的分数。

    样例输入

    4 5 3 2 16 14 13 9 7 1 8 12 11 15 6 4 10

    样例输出 

    7

    思路:

    1、把小X的牌从小到大排序。

    2、把电脑的前一半排序。

    3、要求小的一半从后往前找。

    4、要求大的一半从前往后找。

    标程:

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[10000],b[10000],aa[10000],ans=0;
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=2*n;i++)
        {
            scanf("%d",&a[i]);
            aa[i]=1;
        }
        for (int i=1;i<=2*n;i++)
        {
            scanf("%d",&b[i]);
        }
        sort(a+1,a+2*n+1);
        sort(b+1,b+n+1);
        for (int i=1;i<=n;i++)
        {
            for (int j=1;j<=n;j++)
            {
                if ((aa[j]==1)&&(a[j]<b[i]))
                {
                    aa[j]=0;
                    ans+=1; 
                    break;
                }
            }
        }
        for (int i=n+1;i<=2*n;i++)
        {
            for (int j=1;j<=n*2;j++)
            {
                if ((aa[j]==1)&&(a[j]>b[i]))
                {
                    aa[j]=0;
                    ans+=1; 
                    break;
                }
            }
        } 
     cout<<ans<<endl;
     return 0;
    }

  • 相关阅读:
    启动hadoop 2.6遇到的datanode启动不了
    .net开发遇到的一个问题
    there are 0 datanode.....
    更改HDFS权限
    VMware提示:已将该虚拟机配置为使用 64 位客户机操作系统。但是,无法执行 64 位操作。解决方案
    Hive学习
    linux下mysql安装
    (5.2)mysql高可用系列——测试环境部署
    【转】mysql索引的探究
    【3.1】【mysql基本实验】mysql复制(主从复制/异步复制/半同步复制,一主一从)
  • 原文地址:https://www.cnblogs.com/leonqqs/p/7068125.html
Copyright © 2011-2022 走看看