贪心 --- HNU 13320 Please, go first

Please, go first

Problem‘s Link: http://acm.hnu.cn/online/?action=problem&type=show&id=13320



Mean:

n个人一起去滑雪,要坐电梯到山顶,电梯每5分钟可以送一个人上去。这n个人中有的是组好团一起滑雪的,所以要等到齐了才能开始滑。

但是他们到达电梯下的时间都不是统一的,对于单独一个人来说,他在山下等和在山上等的时间都是一样的。

但是对于n个人的集体来说,如果让他后面的人先上去,这样可能会更节省时间。

求通过调整上电梯的顺序后最多可以节省多少时间。(PS:被这鬼题意坑死 ==||)

analyse:

典型的贪心题。

首先我们来分析未调整之前的状态:

对于一个人,不管你来得多早,你还是得等到和你一个团的最后来的那个人才能开始滑雪。

这样时间浪费在哪里了呢?如果是这种情况:AABBBBBBBBBBBBBBABBB,如果我们变成AAABBBBBBBBBBBBBBBBB,

虽然B团队的时间没变,但是对于A团队来说却节省了很多时间。要贪心的地方就在这。

如何贪呢?

首先需要明确的是:我们不能把同一个团中最后到的那个人提前(人都还没到怎么提),而只能把中间掺杂的其他团的人提前,

而最优情况肯定是:让同一个团的尽量聚合在一起,这样等待的时间才是最少的。

综合这两个条件,我们首先求出未调整队形之前的每种元素的最左边的的位置。

然后按照这个数组来个字符串排序(1.同一个团队的人聚合在一起;2.不同团队之间按照最后的人位置来排序)。

最后对于每个元素,我们求这个元素调整前和调整后的位置之差,累加,最后*5即得答案。

Time complexity: O(N)

Source code:

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-07-26-22.01
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define  LL long long
#define  ULL unsigned long long
using namespace std;
const int MAXN = 25010;
char s[MAXN];
int orp[125], nrp[125], t, n;
bool cmp( char a, char b ) {return orp[a] < orp[b];}
int main()
{
     ios_base::sync_with_stdio( false );
     cin.tie( 0 );
     cin >> t;
     while( t-- )
     {
           cin >> n >> s;
           for( int i = 0; i < n; ++i ) orp[s[i]] = i;
           sort( s, s + n, cmp );
           for( int i = 0; i < n; ++i ) nrp[s[i]] = i;
           long long ans = 0;
           for( int i = 0; i < n; ++i ) ans += abs( orp[s[i]] - nrp[s[i]] );
           cout << ans * 5 << endl;
     }
     return 0;
}
/*

*/

时间: 2024-12-17 16:40:03

贪心 --- HNU 13320 Please, go first的相关文章

HNU 12848 Energy Tycoon (贪心)

贪心 #include<bits/stdc++.h> using namespace std; int main() { long long n; char s[100020]; while(scanf("%I64d",&n)==1) { scanf("%s",s); int len=strlen(s); long long sum1=0,sum2=0,ans=0; for(int j=0;j<len;j++) { if(s[j]=='1'

Hnu 11187 Emoticons :-) (ac自动机+贪心)

题目大意: 破坏文本串,使之没有没有出现表情,破坏就是用空格替换.问最少需要破坏多少个字符. 思路分析: 初看跟Hdu 2457 没什么区别,其实Hdu2457是要求将字符替换成ACGT,而这个只需要替换成空格. 而空格是在表情串中不曾出现的,所以要破坏的时候就要遍历的指针赋为根节点,继续遍历.. 每一次变成根的时候ans就加一. #include <cstdio> #include <iostream> #include <cstring> #include <

Hnu 11187 Emoticons :-) (ac自己主动机+贪心)

题目大意: 破坏文本串.使之没有没有出现表情.破坏就是用空格替换.问最少须要破坏多少个字符. 思路分析: 初看跟Hdu 2457 没什么差别,事实上Hdu2457是要求将字符替换成ACGT,而这个仅仅须要替换成空格. 而空格是在表情串中不曾出现的.所以要破坏的时候就要遍历的指针赋为根节点,继续遍历.. 每一次变成根的时候ans就加一. #include <cstdio> #include <iostream> #include <cstring> #include &l

贪心 --- hdu : Road Trip

Road Trip Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 29, Accepted users: 29 Problem 12882 : No special judgement Problem description You are planning a road trip to visit your friends, each of whom live in

HNU 13308 Help cupid

Help cupid Problem's Link: http://acm.hnu.cn/online/?action=problem&type=show&id=13308&courseid=0 Mean: 地球被划分为24个时区(-11~23),现在给出n个人的时区,将这n个人两两配对,使得n/2对配偶的时区差值之和最小. analyse: 由于给的都是整数,而且只有24个时区,首先统计每个时区有多少人. 然后每个时区的人数都%2,因为同一时区的两个人差值为0. 接着就是枚举人数

HNU2[I题]Omar Loves Candies 贪心

题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12830&courseid=268 解题思路:本题应用到杨氏矩阵的特性.每一次选取上一行的最大值位置到这一行的第一个为正的位置,找到最大值,并一直这样到最后一行. 解题代码: 1 // File Name: I.cpp 2 // Author: darkdream 3 // Created Time: 2014年07月20日 星期日 13时07分24秒 4 5 #

【uva 1615】Highway(算法效率--贪心 区间选点问题)

题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到一个个区间,这样就是选最小的点覆盖所有的区间的问题了.我之前的一篇博文有较详细的解释:关于贪心算法的经典问题(算法效率 or 动态规划).代码实现我先空着.挖坑~

【贪心+Treap】BZOJ1691-[Usaco2007 Dec]挑剔的美食家

[题目大意] 有n头奶牛m种牧草,每种牧草有它的价格和鲜嫩度.每头奶牛要求它的牧草的鲜嫩度要不低于一个值,价格也不低于一个值.每种牧草只会被一头牛选择.问最少要多少钱? [思路] 显然的贪心,把奶牛和牧草都按照鲜嫩度由大到小排序,对于每奶牛把鲜嫩度大于它的都扔进treap,然后找出后继. 不过注意后继的概念是大于它且最小的,然而我们这里是可以等于的,所以应该是找cow[i].fresh-1的后继,注意一下…… 1 #include<iostream> 2 #include<cstdio&

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro