日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod快乐排队 1431

發布時間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod快乐排队 1431 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

1431 快樂排隊
1.0 秒 131,072.0 KB 80 分 5級題
有一群人在排隊,如果某個人想排到前面去,可以花一元錢給直接站在他前面的人,然后和這個人交換位置。如果自己沒有錢了,就不能和前面的人交換。

但是呢,隊列里面的人覺得排他前面的所有人一定要比較有錢的,至少不能比他自己拿的少。否則里面就會有人生氣。站在隊頭的人一定是高興的。

現在給出一個隊列的初始狀態,問能不能調整隊列,使得里面的人都高興。

樣例解釋:樣例1中,隊尾的人可以和前面的人交換,變成9 10。

輸入
單組測試數據。
第一行包含一個整數n (1 ≤ n ≤ 200,000),表示隊列中的人數。
第二行包含n個空格分開的整數 ai (0 ≤ ai ≤ 10^9),ai表示隊列中第i個人手上拿的錢。編號從隊尾開始。
輸出
對于每一組數據如果能夠使得所有人高興輸出Happy,否則輸出Sad。
輸入樣例
2
11 8
2
9 8
輸出樣例
Happy
Sad

思路:

不知道是不是5級題寫太多了,我都已經快懵圈了

這道題在5級題里面算是一個比較簡單的題目了,如果要進行交換的話,自己的金幣數減一,位置數加一;被交換的那個人,金幣數加一,位置數減一。。

所以每個人的位置數 + 金幣數的和是不變的

我們只需要將a[i] + i,然后去重判斷就好了,有重復就是Sad,沒有重復就是Happy

代碼實現:

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<stack> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; const int maxn = 2e5 + 5;int n; int a[maxn]; int b[maxn];int main(){scanf("%d",&n);for(int i = 1;i <= n;i++){scanf("%d",&a[i]);b[i] = a[i] + i;}sort(b + 1,b + 1 + n);int tot = unique(b + 1,b + 1 + n) - b - 1;if(tot != n) printf("Sad\n");else printf("Happy\n");return 0; }

總結

以上是生活随笔為你收集整理的51nod快乐排队 1431的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。