B. Power Sequence(数学+枚举)Codeforces Round #666 (Div. 2)

   日期:2020-09-02     浏览:114    评论:0    
核心提示:原题链接: https://codeforces.com/contest/1397/problem/B测试样例:input31 3 2output1input31000000000 1000000000 1000000000output1999982505NoteIn the first example, we first reorder {1,3,2} into {1,2,3}, then increment a2 to 4 with cost 1 to get a po

原题链接: https://codeforces.com/contest/1397/problem/B


测试样例:

input
3
1 3 2
output
1
input
3
1000000000 1000000000 1000000000
output
1999982505

Note

In the first example, we first reorder {1,3,2} into {1,2,3}, then increment a2 to 4 with cost 1 to get a power sequence {1,2,4}.

题意: 给你一个整数序列,你可以先更改整数序列的顺序,之后,你可以对任意位置的元素进行+1-1操作,成本消耗为1.问变成一个等比数列的最小成本是多少?

解题思路: 这道题关键是要读懂题目。我们知道一个整数序列,同样题目中说明我们可以免费排序,那么根据等比数列的特征,我们肯定会选择从小到大排序。那么由于 a i = c i a_i=c^i ai=ci,所以我们关键是要确定公比 c c c,那么我们可以通过暴力枚举来解决,取成本消耗最少的值。 要注意优化时间,由于我们是不断增加公比去求成本消耗最小值,倘若我们再增加公比的值求得的成本消耗比上一次的还要高,那么这个时候我们就必须要退出了,因为之后再增加还是一样的情况。

AC代码:


#include<bits/stdc++.h> //POJ不支持

#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
#define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define fi first
#define se second
#define mp make_pair

using namespace std;

const long long inf = 1e15;//无穷大
const int maxn = 1e5+3;//最大值。
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll>  pll;
typedef pair<int, int> pii;
//

int n;
ll a[maxn];
void calculate(){
    ll result=inf;
    ll ans,temp;
    for(ll i=1;i<=1000004;i++){
        ans=a[0]-1;
        temp=1;
        bool flag=true;
        for(ll j=1;j<n;j++){
            temp*=i;
            ans+=abs(a[j]-temp);
            if(ans>result){
                flag=false;
                break;
            }
        }
        if(!flag)break;
        result=min(result,ans);
    }
    cout<<result<<endl;
}
int main(){
	//freopen("in.txt", "r", stdin);//提交的时候要注释掉
	IOS;
	while(cin>>n){
        rep(i,0,n-1)
            cin>>a[i];
        sort(a,a+n);
        calculate();
	}
	return 0;
}




 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服