首页 > 其他分享 >[USACO22DEC] Cow College B 题解

[USACO22DEC] Cow College B 题解

时间:2023-01-01 15:24:18浏览次数:62  
标签:tmp le Cow 题解 ll long num College ans

洛谷 P8897

AcWing 4821

题目描述

有\(n\)头奶牛,每头奶牛愿意交的最大学费位\(c_i\),问如何设置学费,可以使赚到的钱最多。

\(1\le n\le 10^5,1\le c_i \le 10^6\)

做法分析

首先看数据范围,猜下正解时间复杂度可能是\(O(n \log n)\)。

对于任意学费\(tmp\),设愿意交的学费大于该费用的奶牛为\(num\)个,则现在的收益为\(tmp * num\)。

显然我们将费用设为大于\(tmp\)的最小的一个\(c_x\),获得的总收益显然比现在更优,因为可交费的奶牛不变,但是交的费用\(c_x > tmp\)变大了。

因此我们就可以枚举每个\(c_i\)作为\(tmp\),那现在只需求出大于等于\(c_i\)的个数就行了。

可以从大到小排序,然后枚举每个\(c_i\),那大于等于\(c_i\)的个数就是现在的下标\(i\),也就是求最大的\(c_i * i\)。

注意开long long

还有一个要注意的点是,当有多个解时,要输出学费最小的解。

排序\(O(n \log n)\),遍历\(O(n)\)。

代码

#include<bits/stdc++.h>

#define ll long long
#define MAXn 100010

using namespace std;

int n;
ll a[MAXn], ans = 0, num;

inline bool com(ll a, ll b)
{
    return a > b;
}

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%lld", &a[i]);
        
    sort(a + 1, a + n + 1, com);
    
    for(int i = 1; i <= n; i++)
    {
        ll tmp = a[i] * i;
        if(tmp >= ans)//注意这里是大于等于
        {
            ans = tmp;
            num = a[i];
        }
        
    }
    
    printf("%lld %lld", ans, num);
    
    return 0;
}

标签:tmp,le,Cow,题解,ll,long,num,College,ans
From: https://www.cnblogs.com/six-one/p/17018095.html

相关文章

  • 武汉工程大学第五届程序设计新生赛 I题 题解
    (2022,12,3)原题链接(来自牛客竞赛)抽象题意题目有点长,我们需要抽象出一个模型:一个长度为\(n\)的序列\(a_i\),从\(a_1\)开始向后跳,每次可以从\(a_i\)跳到下一位\(a_{i+1}\),......
  • IfcOwnerHistory
    IfcOwnerHistory实体定义IfcOwnerHistory定义所有历史和标识相关信息。为了提供快速访问,它直接连接到所有独立的对象、关系和属性。 IfcOwnerHistory用于标识创建和拥......
  • 洛谷P4146 序列终结者 题解 splay tree
    题目链接:​​https://www.luogu.com.cn/problem/P4146​​题目大意:支持:区间更新(+x)区间翻转区间查询(最大值)解题思路:几乎和​​AcWing2437.Splay​​这题一模一样。示例程......
  • CF1770D Koxia and Game 题解
    47min时过C降智50min做不出D。果然晚上容易降智。题意不想复述,好长。linktoCF|linktoLuogu合理猜测留给后手的两个数字必须相等。证明为若不相等,则后手可以......
  • 洛谷 P2395 BBCode转换Markdown 题解
    洛谷P2395BBCode转换Markdown题解题目传送门:here.一道毒瘤的大模拟,给了你一部分的BBCode和Markdown语法,叫你转换。如下表:BBCodeMarkdown[h1]文字[/h1......
  • Codeforces Good Bye 2022 CF 1770 A~E 题解
    题目链接A.KoxiaandWhiteboards注意每一步替换操作都是强制的,而不是可选的。所以就用一个multiset维护所有的数,每次选一个最小的替换掉即可。时间复杂度\(O(nlogn)\)......
  • P4247 [清华集训2012]序列操作 题解
    线段树练手好题。直接上线段树五问:维护的信息是什么?由于\(c\le20\),我们不妨对线段树的每个节点维护一个\(f_k\)表示在对应区间里选择\(k\)个数相乘的所有方案的和......
  • 题解 CF1770B【Koxia and Permutation】
    \(k=1\)的情况是平凡的。\(k>1\)的情况,显然答案至少为\(n+1\),下面给出构造证明\(n+1\)总可以取到。可以构造\(p=[n,1,n-1,2,n-2,3,\cdots]\),此时以\(n\)作为最......
  • 题解 CF1770C【Koxia and Number Theory】
    显然,如果存在\(a_i=a_j\),则一定无解。否则,考虑每一个\(2\sim50\)的正整数\(k\),如果原数组每个数对\(k\)取模后,每种余数都出现至少两次,则无解。因为此时无论如何选......
  • 【题解】P5574 [CmdOI2019]任务分配问题
    stocmd学长orz题意P5574[CmdOI2019]任务分配问题给定一个长度为\(n\)的排列,试将它分成\(k\)段,使得每段的顺序对数量之和最小。\(n\leq2.5\times10^4,k\l......