zoukankan      html  css  js  c++  java
  • Nowcoder9986G.机器人(__int128、思维、状压DP、贪心)

    G.机器人

    题意:

    有n个机器人,每个机器人会读入一个x,并返回ax+b。

    现在有一个数x和n个机器人,每个机器人有参数a和b。

    请你排列机器人,使得最后的参数尽可能的大。

    询问最后的最大值。

    题解:

    两种做法。

    第一种:

    化简这个不等式:(a_1(a_2x+b_2)+b_1<a_2(a_1x+b_1)+b_2)

    按照这个不等式对数组排序即可。

    时间复杂度(O(nlogn))

    第二种:

    观察到n的范围只有20,状压DP。

    (20^{20})会爆Long Long,所以要用__int128存。

    // Problem: 机器人
    // Contest: NowCoder
    // URL: https://ac.nowcoder.com/acm/contest/9986/G
    // Memory Limit: 1048576 MB
    // Time Limit: 6000 ms
    // 
    // Powered by CP Editor (https://cpeditor.org)
    
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    pair<int,int> a[maxn];
    long long ans=0;
    long long x;
    int n;
    bool cmp (pair<int,int> x,pair<int,int> y) {
    	return 1ll*x.first*y.second+x.second<1ll*y.first*x.second+y.second;
    }
    
    void print(__int128 x){
        if(x>9)print(x/10);
        putchar(x%10+'0');
    }
    int main () {
    	scanf("%d%d",&n,&x);
    	for (int i=1;i<=n;i++) scanf("%d%d",&a[i].first,&a[i].second);
    	sort(a+1,a+n+1,cmp);
    	__int128 ans=x;
    	for (int i=1;i<=n;i++) ans=ans*a[i].first+a[i].second;
    	print(ans);
    }
    
  • 相关阅读:
    Log4Net使用指南
    Log4net 写文件日志与数据库日志
    JSON-Schema 最科学的表单验证模式
    番茄时间工作法
    css 温故而知新 1px的问题
    $.ajax 温故而知新坑
    H5中滚动卡顿的问题
    横向思维
    Wd 西部数据
    使用AlloyLever来搞定开发调试发布,错误监控上报,用户问题定位
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/14521333.html
Copyright © 2011-2022 走看看