2018计蒜客复赛 贝壳找房函数最值(贪心+优先队列)
Posted yzm10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018计蒜客复赛 贝壳找房函数最值(贪心+优先队列)相关的知识,希望对你有一定的参考价值。
贝壳找房函数最值
- 35.12%
贝壳找房的攻城狮最近在研究一次函数 f(x) = ax + bf(x)=ax+b。
现在有 nn 个一次函数,f_i(x) = a_ix+b_i,\ i = \1 \mathellipsis n\fi?(x)=ai?x+bi?, i=1…n。
容易发现,一次函数嵌套一次函数,还是一次函数。
\displaystyle f_i(f_j(x)) = a_i ( a_jx + b_j) + b_ifi?(fj?(x))=ai?(aj?x+bj?)+bi?
给定 xx,并且对于所有的 f_i(x)fi?(x) 可以任意改变顺序嵌套函数,求 f(f(f(…f(x))…)f(f(f(…f(x))…) 的最大值。
输入数据
一个整数 T ( T \le 20 )T(T≤20) 代表数据组数。
每组数据:
第一行两个整数 n,\ xn, x 代表一共有 nn 个函数 ( 1 \le n \le 10000,\ 0 \le x \le 91≤n≤10000, 0≤x≤9) 。
第二行 nn 个整数代表 a_iai? , 1 \le a_i \le 91≤ai?≤9 。
第三行 nn 个整数代表 b_ibi? , 1 \le b_i \le 91≤bi?≤9 。
输出数据
为了使问题简化,对于每组数据只需要输出最大值的个位即可。(比如函数的值可能是 1919 或者 2323 ,但最终应该输出的是 33)。
提示
对于第一组数据,有 66 种情况
3 \times (1 \times (2 \times 7 + 3) + 1) + 2 = 563×(1×(2×7+3)+1)+2=56
3 \times (2 \times (1 \times 7 + 1) + 3) + 2 = 593×(2×(1×7+1)+3)+2=59
1 \times (3 \times (2 \times 7 + 3) + 2) + 1 = 541×(3×(2×7+3)+2)+1=54
1 \times (2 \times (3 \times 7 + 2) + 3) + 1 = 501×(2×(3×7+2)+3)+1=50
2 \times (3 \times (1 \times 7 + 1) + 2) + 3 = 552×(3×(1×7+1)+2)+3=55
2 \times (1 \times (3 \times 7 + 2) + 1) + 3 = 512×(1×(3×7+2)+1)+3=51
所以输出 99
样例输入
2 3 7 3 1 2 2 1 3 3 2 9 1 2 9 1 2
样例输出
9 1
题目来源
https://blog.csdn.net/qq_41730082/article/details/80724298
正解:我们思考两个f的情况ax+b与cx+d,如此,有两种嵌套方式,分别为:a*(c*x+d)+b 与 c*(a*x+b)+d ,我们比较这两种嵌套方式的不同,总结得:a*(c*x+d)+b=ac*x+ad+b ; c*(a*x+b)+d=ac*x+bc+d,那么如果嵌套函数ff取第一式比较大的话,则ad+b>bc+d。说明第一式与第二式的不同不在于系数而在于ad+b与bc+d的大小,即,我们可以根据ai*bj+bi的大小对全体f进行排序。
两两之间的关系不是一劳永逸的,需要用动态变化的优先队列。
#include<bits/stdc++.h> using namespace std; typedef long long ll; struct Node int a,b; friend bool operator<(Node a,Node b) return a.a*b.b+a.b>b.a*a.b+b.b; a[10005]; priority_queue<Node> q; int main() int t,n,x,i; scanf("%d",&t); while(t--) scanf("%d%d",&n,&x); for(i=1;i<=n;i++) scanf("%d",&a[i].a); for(i=1;i<=n;i++) scanf("%d",&a[i].b); q.push(a[i]); while(q.size()) x=q.top().a*x+q.top().b; x%=10; q.pop(); printf("%d\n",x); return 0;
以上是关于2018计蒜客复赛 贝壳找房函数最值(贪心+优先队列)的主要内容,如果未能解决你的问题,请参考以下文章