标签:开始 com 调整 html void buffer gray can head
有一群人在排队,如果某个人想排到前面去,可以花一元钱给直接站在他前面的人,然后和这个人交换位置。如果自己没有钱了,就不能和前面的人交换。
但是呢,队列里面的人觉得排他前面的所有人一定要比较有钱的,至少不能比他自己拿的少。否则里面就会有人生气。站在队头的人一定是高兴的。
现在给出一个队列的初始状态,问能不能调整队列,使得里面的人都高兴。
样例解释:样例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
思路:可以发现下标加上数值是个定值所以,只要判重就可以了;
1 #include<stdio.h> 2 #include<algorithm> 3 #include<stdlib.h> 4 #include<queue> 5 #include<map> 6 #include<stack> 7 #include<string.h> 8 #include<iostream> 9 #define FOR(i,n) for (i = 0;i < n;i++) 10 #define SC(n) scanf("%d",&n); 11 using namespace std; 12 const int BufferSize=1<<16; 13 char buffer[BufferSize],*head,*tail; 14 inline char Getchar() 15 { 16 if(head==tail) 17 { 18 int l=fread(buffer,1,BufferSize,stdin); 19 tail=(head=buffer)+l; 20 } 21 return *head++; 22 } 23 inline int read() 24 { 25 int x=0,f=1; 26 char c=Getchar(); 27 for(; !isdigit(c); c=Getchar()) if(c==‘-‘) f=-1; 28 for(; isdigit(c); c=Getchar()) x=x*10+c-‘0‘; 29 return x*f; 30 } 31 int ans[500000]; 32 map<int,int>my; 33 int main(void) 34 { 35 int c; 36 c = read(); 37 int flag = 0; 38 int i; 39 FOR(i,c) 40 { 41 ans[i] = read(); 42 ans[i] = ans[i]+i; 43 } 44 sort(ans,ans+c); 45 int x = ans[0]; 46 for(i = 1; i < c; i++) 47 { 48 if(ans[i]==x) 49 { 50 flag = 1;break; 51 } 52 x = ans[i]; 53 } 54 if(flag)printf("Sad\n"); 55 else printf("Happy\n"); 56 return 0; 57 }
标签:开始 com 调整 html void buffer gray can head
原文地址:http://www.cnblogs.com/zzuli2sjy/p/5994738.html