zoukankan      html  css  js  c++  java
  • SSLZYC 小麦高度

    题目大意:
    Smart和Sarah为了让他们种的小麦的高度相同,决定玩以下的游戏:
    1、当轮到Smart的时候,他会选择最短的那个小麦,然后延长高度到第二短的小麦的高度。
    2、当轮到Sarah的时候,她会选择最长的那个小麦,然后剪短高度到第二长的小麦的高度。
    游戏如果能继续的话,小麦中必须有三种不同的高度,如果有人不能再继续游戏,那么他就失败了。
    给定所有小麦的高度,假设从Smart开始游戏,写一个程序决出游戏中谁是胜者,并输出游戏结束时最高的和最低的小麦的高度。


    思路:
    这道题是一道暴力模拟的问题。我们先用桶排,计算每种长度的小麦各有几个,接着暴力模拟,可以轻(kun)松(nan)地出奇迹。
    由于编程过程较容易理解,所以在此不多解释了。


    代码:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int a[100001],b[100001],c[100001],n,x,l,r;
    
    int main()
    {
        freopen("wheat.in","r",stdin);
        freopen("wheat.out","w",stdout);
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            a[x]++;  //桶排序
        }
        for (int i=1;i<=100000;i++)
         if (a[i]>0) 
         {
             r++;  
             b[r]=a[i];  //从小到大小麦依次的高度
             c[r]=i;  //小麦的编号
         }
        l=1;
        if (r-l<=1)   //特殊情况(还没开始就结束了)
        {
            printf("Sarah\n%d %d",c[l],c[r]);
            return 0;
        }
        while (r-l>1)  //结束条件
        {
            if (b[r]>b[l]) 
            {
                b[r]-=b[l];
                b[r-1]+=b[l];
                b[l+1]+=b[l];
                b[l]=0;
            }
            else
            {
                b[l]-=b[r];
                b[l+1]+=b[r];
                b[r-1]+=b[r];
                b[r]=0;
            }
            if (b[l]==0) l++;
            if (b[r]==0) r--;        //暴力模拟
        }
        if (b[l]<=b[r]) printf("Sarah\n%d %d",c[l],c[r]);
                   else printf("Smart\n%d %d",c[l],c[r]);
        return 0;
    }
  • 相关阅读:
    windows基线检测脚本编写指南-powershell版
    2020蓝帽杯CTF Web 题
    2020天翼杯CTF Web 题
    Firefox 密码脱取
    利用iptables做端口转发
    Flask 快速学习笔记
    JSP无%%号命令执行一句话
    linux 后渗透凭据收集
    Fastjson漏洞利用
    Gogs远程命令执行利用
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313126.html
Copyright © 2011-2022 走看看