zoukankan      html  css  js  c++  java
  • 2018中国大学生程序设计竞赛

    hdu 6438 Buy and Resell

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438

    题意:商人Noswal每天去一个城市(有序),购买或贩卖(二选一)power cube,城市 i 的物价为 a[i], 求其最大获利(ans)以及在此情况下的最少交易次数(cnt)。

    思路:维护一个从小到大的优先队列,队中元素为pair<物价,暂定交易性质(1为卖, 2为买)>。(物价x相等时,“卖”被优先替换,以保证交易次数cnt最少)。

               对于后去的每个城市的物价x, 与队首元素(top)(当前物价最小城市)进行对比,

                      若x <= top.first则舍弃x。

                      否则,ans += x - top.fist; 

                             若top.second == 2(购买),则交易次数cnt += 2;并将其替换为(x, 1)

           若top.second == 1(贩卖),则该top并非最优选项,之前被替换的cube可以卖出更高的价钱x,故而将top替换为(x,1),并将top.second换为2(暂定购买)再次入队。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef long long ll;
     5 typedef pair<ll, int> pi;
     6 const int N = 1e5+5;
     7 
     8 int main()
     9 {
    10     int t, n, cnt;
    11     ll ans, x;
    12     for(scanf("%d", &t); t; t--){
    13         scanf("%d", &n);
    14         ans = cnt = 0;
    15         priority_queue<pi, vector<pi>, greater<pi> > pq;
    16         scanf("%lld", &x); pq.push(make_pair(x, 2));
    17         while(--n){
    18             scanf("%lld", &x);
    19             pi top = pq.top();
    20             if(x <= top.first) pq.push(make_pair(x, 2));
    21             else{
    22                 ans += x - top.first;
    23                 if(top.second == 2) cnt += 2;
    24                 pq.pop();
    25                 if(top.second == 1) pq.push(make_pair(top.first, 2));
    26                 pq.push(make_pair(x, 1));
    27             }
    28         }
    29         printf("%lld %d
    ", ans, cnt);
    30     }
    31     return 0;
    32 }
    View Code

    比赛时读完题瞬间想到O(n^2)的大暴力,看到过题数不多就放弃了感觉大佬们一定是t了QAQ。。。

    但是!!!赛后突然发现很简单???然后一顿乱写竟然也a了???明明1010也是写的O(n^2)的tledp还不换题简直是脑子瓦特了。。。

    还一直和队友说这么多人tle1001肯定很难窝们看1003叭。。。

    然而1003。。。费马小定理+群论。离散数学学那么渣。。。某虎直接跳过群论不讲啊当时。。。根本不可能做出来的好嘛。。。果然大佬的榜单跟不起。。。

  • 相关阅读:
    Gym 100801D Distribution in Metagonia (数学思维题)
    Gym 100801E Easy Arithmetic (思维题)
    GNOME编辑器--gedit 构建基本脚本
    linux默认编辑器 sublime
    su和su-命令的本质区别
    #ifdef #ifndef使用
    linux 安装软件程序
    linux命令行与shell脚本编程大全---更多bash shell命令
    预处理语句--#define、#error和#warning
    FW开发代码规范---小任性(2)
  • 原文地址:https://www.cnblogs.com/curieorz/p/9553355.html
Copyright © 2011-2022 走看看