51nod快乐排队 1431
題意:
1431 快樂(lè)排隊(duì)
1.0 秒 131,072.0 KB 80 分 5級(jí)題
有一群人在排隊(duì),如果某個(gè)人想排到前面去,可以花一元錢(qián)給直接站在他前面的人,然后和這個(gè)人交換位置。如果自己沒(méi)有錢(qián)了,就不能和前面的人交換。
但是呢,隊(duì)列里面的人覺(jué)得排他前面的所有人一定要比較有錢(qián)的,至少不能比他自己拿的少。否則里面就會(huì)有人生氣。站在隊(duì)頭的人一定是高興的。
現(xiàn)在給出一個(gè)隊(duì)列的初始狀態(tài),問(wèn)能不能調(diào)整隊(duì)列,使得里面的人都高興。
樣例解釋:樣例1中,隊(duì)尾的人可以和前面的人交換,變成9 10。
輸入
單組測(cè)試數(shù)據(jù)。
第一行包含一個(gè)整數(shù)n (1 ≤ n ≤ 200,000),表示隊(duì)列中的人數(shù)。
第二行包含n個(gè)空格分開(kāi)的整數(shù) ai (0 ≤ ai ≤ 10^9),ai表示隊(duì)列中第i個(gè)人手上拿的錢(qián)。編號(hào)從隊(duì)尾開(kāi)始。
輸出
對(duì)于每一組數(shù)據(jù)如果能夠使得所有人高興輸出Happy,否則輸出Sad。
輸入樣例
2
11 8
2
9 8
輸出樣例
Happy
Sad
思路:
不知道是不是5級(jí)題寫(xiě)太多了,我都已經(jīng)快懵圈了
這道題在5級(jí)題里面算是一個(gè)比較簡(jiǎn)單的題目了,如果要進(jìn)行交換的話(huà),自己的金幣數(shù)減一,位置數(shù)加一;被交換的那個(gè)人,金幣數(shù)加一,位置數(shù)減一。。
所以每個(gè)人的位置數(shù) + 金幣數(shù)的和是不變的
我們只需要將a[i] + i,然后去重判斷就好了,有重復(fù)就是Sad,沒(méi)有重復(fù)就是Happy
代碼實(shí)現(xiàn):
#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; }總結(jié)
以上是生活随笔為你收集整理的51nod快乐排队 1431的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SEO单个网页的最优化操作
- 下一篇: java调起喇叭,【音响知识】调音不求人