zoukankan      html  css  js  c++  java
  • 51nod 1431 快乐排队

    题目来源: CodeForces
    基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
     收藏
     关注

    有一群人在排队,如果某个人想排到前面去,可以花一元钱给直接站在他前面的人,然后和这个人交换位置。如果自己没有钱了,就不能和前面的人交换。

    但是呢,队列里面的人觉得排他前面的所有人一定要比较有钱的,至少不能比他自己拿的少。否则里面就会有人生气。站在队头的人一定是高兴的。

    现在给出一个队列的初始状态,问能不能调整队列,使得里面的人都高兴。

    样例解释:样例1中,队尾的人可以和前面的人交换,变成9 10。

    Input
    单组测试数据。
    第一行包含一个整数n (1 ≤ n ≤ 200,000),表示队列中的人数。
    第二行包含n个空格分开的整数 ai (0 ≤ ai ≤ 10^9),ai表示队列中第i个人手上拿的钱。编号从队尾开始。
    Output
    对于每一组数据如果能够使得所有人高兴输出Happy,否则输出Sad。
    Input示例
    2
    11 8
    2
    9 8
    Output示例
    Happy
    Sad



    可以把位置看做另一部分钱

    因为位置交换会使位置+1 金钱-1

    这样位置+金钱是个定值

    所以只需要排序去重就可以 

    脑洞题。。

    屠龙宝刀点击就送

    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #define N 205000
    
    using namespace std;
    int zs[N],n,t,sum;
    int main()
    {
        memset(zs,0,sizeof(zs));
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&zs[i]);
            zs[i]+=i;
        }
        sort(zs+1,zs+n+1);
        int i;
        for(i=2;i<=n;i++)
         if(zs[i-1]==zs[i])
          break;
        if(i==n+1) printf("Happy
    ");
        else printf("Sad
    ");
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    查看.Net Framework版本的方法
    JS手机号码自动换位
    VS2008正版序列号
    ASP.NET对XML的操作
    JS宽高度
    下载某个网站的内容
    C#中如何将控件中表格数据导出到exeal文档中
    像素 厘米 英寸 换算
    编程经验点滴避免使用汉语拼音做变量名
    编程经验点滴避免在数据库访问函数中使用 try catch
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7510390.html
Copyright © 2011-2022 走看看