UVA - 1346 Songs (贪心+排序)

题意:已知每首歌的标号,长度和播放频率,求一种播放顺序,使得最小,并且输出该播放顺序下第t首歌的标号。

分析:

1、长度越短,播放频率越大的歌排在前面,上式越小。

2、s(i)表示的是当前播放顺序下这首歌是第几个播放。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#define lowbit(x) (x & (-x))
const double eps = 1e-8;
inline int dcmp(double a, double b){
    if(fabs(a - b) < eps) return 0;
    return a > b ? 1 : -1;
}
typedef long long LL;
typedef unsigned long long ULL;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const LL LL_INF = 0x3f3f3f3f3f3f3f3f;
const LL LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 1e9 + 7;
const double pi = acos(-1.0);
const int MAXN = 70000 + 10;
const int MAXT = 10000 + 10;
using namespace std;
struct Node{
    int id, len;
    double f;
    double k;
    void read(){
        scanf("%d%d%lf", &id, &len, &f);
        k = len / f;
    }
    bool operator < (const Node&rhs)const{
        return k < rhs.k;
    }
}num[MAXN];
int main(){
    int n;
    while(scanf("%d", &n) == 1){
        for(int i = 1; i <= n; ++i){
            num[i].read();
        }
        sort(num + 1, num + 1 + n);
        int t;
        scanf("%d", &t);
        printf("%d\n", num[t].id);
    }
    return 0;
}
时间: 2024-10-26 03:16:04

UVA - 1346 Songs (贪心+排序)的相关文章

uva 1346 Songs(贪心)

uva 1346 Songs 题目大意:John Doe 是一个著名的DJ,现在他有n首播放个曲, 每首歌曲有识别符key,歌曲长度l,以及播放频率q.想在John Doe 想将磁带上的歌曲重新排列,方便播放,播放所有歌曲有一个复杂度的计算∑(1≤i≤n)q[i] * ( ∑(1≤j≤i)l[j] ), 然后给出S,请输出重新排列后的第S首歌的识别码. 解题思路:贪心. #include<stdio.h> #include<string.h> #include<stdlib.

UVa 1346 - Songs

题目大意:n张唱片,每张都有长度和频率,要求题目中公式值最小.求一个排序,输出该排序下第m张CD的id. 思路:贪心,长度越长放越后面,频率越低放越后面,所以按len/p去排序即可. #include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;struct CD{ int id; double len; double p;} cd[100000]

【UVA】1346 - Songs(贪心)

根据题意可以得到,长度小,并且频率低的排到前面,所以设 k = l  / q; 之后sort排序就可以 14128675 1346 Songs Accepted C++ 0.029 2014-09-01 11:30:14 #include <iostream> #include <cstdlib> #include <cstdio> #include <string> #include <cstring> #include <cmath&g

uva 10026 Shoemaker&#39;s Problem(贪心+排序)

虽然是个水题,但是在一些细节上wa了几次,好像不支持'\b'退格符号,我用在了输出空格那,结果wa了...白白 wa了几次...题意是看的题解..今天只写了两道题,速度有点慢,得加快了,以后得先认真读懂题目,题目读懂了 就相当于做出来一半然后仔细动脑想想,有想法了再敲,不能盲目的做题.另外,热烈祝贺今天c++ primer看到 了100页 思路: 这道题是让给的数据是每件工作需要做的天数和每耽误一天所需要的费用,让求一个序列使得付费最小,如果有相同答 案把字典树最小的输出...输出的是序号,该件

uva 1511 - Soju(贪心)

题目链接:uva 1511 - Soju 题目大意:给出两个点集,问说分别从两个点集中取一点的哈夫曼距离最小值.注意一个点集的x坐标小于0,另一个大于0. 解题思路:因为x2一定大于x1,所以对于x这一维,一定是+x2-x1,所以只需要考虑y这一维坐标即可. #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> u

【贪心+排序】国王游戏

[贪心+排序]国王游戏 Time Limit: 1000MS Memory Limit: 131072KB Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果. 国王不希

UVa 11039 Building designing (贪心+排序+模拟)

题意:给定n个非0绝对值不相同的数,让他们排成一列,符号交替但绝对值递增,求最长的序列长度. 析:我个去简单啊,也就是个水题.首先先把他们的绝对值按递增的顺序排序,然后呢,挨着扫一遍,只有符号不同才计数,easy!!! 代码如下: #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; const int maxn = 5

HDU 6034 Balala Power!(贪心+排序)

Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1411    Accepted Submission(s): 239 Problem Description Talented Mr.Tang has n strings consisting of only lower case characters.

Uva 10305 给任务排序

题目链接:https://uva.onlinejudge.org/external/103/10305.pdf 紫书P167 拓扑排序. dfs——从一个点出发,dfs 与之相连的所有点,把本身放入到拓扑排序的首部. #include <bits/stdc++.h> using namespace std; const int Maxn = 1000; int G[Maxn][Maxn]; int topo[Maxn]; int c[Maxn]; int n,m,t; bool dfs(int